morikomorou’s blog

自分が学んだことなどの備忘録的なやつ

【python】外部アプリケーションを操作する方法を解説!RPA入門!


Pythonでpython以外の外部ソフトウェア、外部アプリケーション、外部プロセスを開いたり、操作したりする方法について紹介します。

はじめに

最近RPA(Robotic Process Automation)という言葉をよく聞きますが、PC上で普段行う作業を自動化することの意味です。
大量のpdfファイルを印刷したりだとか、wordに定型文を打ち込んだりだとか、そういった繰り返し業務の自動化はpythonでも可能です。

今回は簡単な例とともにRPA入門してみましょう。




外部アプリケーションを開く

まずは、pythonでpython以外の外部アプリケーションを開く方法について紹介します。pythonで標準でインストールされているsubprocessというモジュールを使用します。
subprocess.Popen()でアプリケーションを開くことができます。windowsのメモ帳を開いてみましょう。

import subprocess

subprocess.Popen(r'C:\WINDOWS\system32\notepad.exe', shell=True)

subprocess.Popen()関数の引数には実行したいソフトのexeファイルのパスを指定します。メモ帳の実行ファイルのパスは上記の通りでした。
shellオプションはwindowsの場合はつけておかないとダメみたいです
実行結果は以下の通りで、ちゃんとメモ帳が開かれました!

指定のファイルを外部アプリケーションを開く

外部アプリケーションを開く際に、そのアプリで開きたいファイルを指定することも可能です。subprocess.Popen()関数に引数としてアプリケーションのパス、開きたいファイルのパスをリストにしたものを指定しましょう。
今回はtest.txtというファイルを事前に作成しておき、そのファイルをメモ帳で開いてみます。

import subprocess

subprocess.Popen([r'C:\WINDOWS\system32\notepad.exe', 'test.txt'], shell=True)

test.txtがメモ帳で開かれました!

開いた外部アプリケーションを閉じる

開いたら1秒待って閉じてみましょう。閉じる際は.terminate()メソッドでアプリを閉じることができます。

import subprocess
import time

myprocess = subprocess.Popen([r'C:\WINDOWS\system32\notepad.exe', 'test.txt'], shell=True)
time.sleep(1)
myprocess.terminate()

結果は以下です。やりたいことがやれてますね。

外部アプリケーションを複数開く

subprocess.Popen()関数を何度も呼ぶことで複数のアプリケーションを一気に呼び出すことも可能です。毎日立ち上げるアプリを一気に起動するランチャーみたいな使い方もできそうです。
メモ帳と、エクスプローラーを起動してみましょう。

import subprocess

subprocess.Popen(r'C:\WINDOWS\system32\notepad.exe', shell=True)
subprocess.Popen('explorer', shell=True)

無事2個立ち上がりましたね。




外部アプリケーションを操作する

今回はpyautoguiというライブラリを使います。pyautoguiではキーボードをpythonで操作することができ、これを使って外部アプリケーションを自動化してみようと思います。

pyautoguiのインポート

コマンドラインで以下の呪文でインストールします

pip install pyautogui

メモ帳を開いて書き込んでみる

pythonからメモ帳を開き、文章を書き込んだのちに保存するプログラムを作成します。

文字を打ち込む場合は以下のプログラムで実行できます

import pyautogui

pyautogui.write("I have a pen.", interval=0.5)

上記はI have a pen.という文字列を0.5秒間隔で順番に打ち込むプログラムになります。

さっそくメモ帳を開いて実践してみましょう。

import subprocess
import pyautogui
import time

subprocess.Popen(r'C:\WINDOWS\system32\notepad.exe', shell=True)
time.sleep(1) # メモ帳が開くのを1秒待つ
pyautogui.write("I have a pen.", interval=0.2)

結果は以下です。


メモ帳を保存する

名前を付けて保存までやってみましょう。メモ帳で名前を付けて保存はCtrl+Shift+Sのショートカットキーで実行できます。
pyautoguiでのキー入力は以下のようにします。

# Enterキーを入力
pyautogui.press('enter')

# 複数キー同時入力(Ctrl+Shift+S)
pyautogui.hotkey('ctrl', 'shift', 's')

これを使ってメモ帳を保存してみましょう!

import subprocess
import pyautogui
import time

subprocess.Popen(r'C:\WINDOWS\system32\notepad.exe', shell=True)
time.sleep(1)
pyautogui.write("I have a pen.", interval=0.2)
time.sleep(1)

pyautogui.hotkey('ctrl', 'shift', 's') # 名前を付けて保存
time.sleep(1)
pyautogui.write("rpa", interval=0.2) # rpa.txtという名前で保存
time.sleep(1)
pyautogui.press('enter') # enterを押して保存

ちゃんと保存まで完了しました。


終わりに

今回はsubprocessとpyautoguiを使ってRPAをやってみました。キーボード入力だけでもほとんどのことはできるのでこれだけ覚えておくだけでもいろんなことの自動化に使えます。
みなさんもぜひチャレンジしてみてください。