Pythonのsubprocessモジュールでいつも使うファイル・フォルダを自動で開くプログラム

Python

いつも使うアプリケーションをPythonから起動したい

そんな時はPythonのsubprocessモジュールを使うと便利です。

subprocessモジュールPopen()関数では、Pythonから他のアプリケーションを実行できます。

プログラムを実行するだけで、大量のアプリケーションを一気に開くことも可能です。

たったワンクリックで仕事用で使うアプリケーションやファイルを下のように複数一括で起動できます。

今回の記事の中では、subprocessを使って実際にプログラムの起動ができるようになるまでを解説していきます。

Pythonから別のアプリケーションを実行できるsubprocessモジュール

subprocessモジュールでは、Pythonプログラムからアプリケーションを実行することができます。
今のプロセスとは別のプロセスを実行できるので、以下のような処理が可能です。

現在のPythonのプログラムから、別のPythonのプログラムを実行する
現在のPythonプログラムから、Python以外のアプリケーションを実行する

subprocessは標準ライブラリなので、下記のようにインポートするだけで利用できます。
import subprocess

プログラムを今すぐ使ってみたい方はこちら

指定したプログラムでファイルを開くPopen()関数

subprocess.Popen(['使うプログラム', '開きたいファイル'])
subprocess.Popen()で、引数に指定したプログラム・ファイルをPythonから実行します。
返り値はPopenインスタンスで、ここへコマンドを与えて操作も可能です。

基本的な使い方は次のようになっています。

    • プログラムがまだ実行しているかチェック

Popen.poll()
poll()で、起動したプログラムが実行中かチェックします。
呼び出した時点でプログラムが実行中なら、Noneを返します。
プログラムが終了していた場合、終了コードの整数値が返ります。

    • プログラムが終了するまで待つ

Popen.wait()
wait()で、起動したプログラムが終了するまで待機します。
返り値はプログラムの終了コードになります。
他のプログラムが終了するまで一時停止したい時などに使います。

    • プログラムを強制終了する

Popen.kill()
kill()で、起動したプログラムを強制終了します。
使っているプログラムを終了する前に強制終了したい時などに使います。

Popen()関数はプロセスを生成するだけで,終了を待つ訳ではありません。
終了を待たないので、複数のプログラムを並行して走らせることが可能です。

フォルダを開くにはエクスプローラを指定

subprocess.Popen(['explorer', '開きたいフォルダ'],shell=True)
たとえばフォルダを開くには、上記のようにexplorerを指定します。
この場合、explorerで指定したフォルダを開くコマンドになります。
shell=Trueでは、コマンドプロンプト経由で処理するようにしています。

macOSのアプリケーションを起動する方法

subprocess.Popen(['open', '開きたいapp'])
macOSのアプリケーションを実行する場合、openコマンドを指定します。

◯◯.appは関連ファイルが格納されたディレクトリで、実行ファイルではありません。
そのためターミナル上から起動するには、openコマンドを使います

プログラム例:

import subprocess
music = '/System/Applications/Music.app'
subprocess.Popen(['open', music])

macOSに搭載されているミュージックアプリを起動することができます。

subprocess.run()とsubprocess.Popen()の違いは同期か非同期か

Pythonから外部コマンドを実行する方法としては、subprocess.run()関数もあります。
subprocess.run()は同期処理ですが、subprocess.Popen()は非同期処理になります。

同期処理のrun()では、前の処理が終わってから次の処理に進みます。
非同期処理のPopen()なら、前の処理と次の処理を並行して進めることができます。

音声を再生するコマンドを使うと、run()とPopen()の違いがわかりやすいです。
2つの音声ファイル、1.wavと2.wavを用意して、下のプログラムを実行してみます。
import subprocess
subprocess.run(['aplay', '1.wav'])
subprocess.run(['aplay', '2.wav'])

run()の場合、1.wavの再生が終わってから、2.wavの再生が始まります。

import subprocess
subprocess.Popen(['aplay', '1.wav'])
subprocess.run(['aplay', '2.wav'])

Popen()の場合、1.wavと2.wavの2つの音声がほぼ同時に再生されます。

指定したフォルダやファイルを一括で開くプログラム

Subprocessモジュールについてわかったところで、実際に下のように一括でプログラムを起動できるPythonのプログラムを見ていきす。

プログラムのソースコード

上の動画のように複数のアプリケーションを一括で起動させるプログラムのソースコードはこちらになります。

#①ライブラリをインポート
import subprocess

#②ファイルパスを設定
excel = r'C:\Program Files (x86)\Microsoft Office¥Office12¥excel.exe' #②-①Excel
images = r'C:\test\images' #②-②「images」フォルダ
image = r'C:\test\tweet.png' #②-③「tweet.png」ファイル
paint = r'C:\Windows\system32\mspaint.exe' #②-④ペイント
chrome = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' #②-⑤GoogleChrome

#③アプリケーションを開く
subprocess.Popen(excel)
#④フォルダを開く
subprocess.Popen(['explorer',images],shell=True)
#⑤既定のプログラムでファイルを開く
subprocess.Popen(['start',image],shell=True)
#⑥指定したプログラムでファイルを開く
subprocess.Popen([paint,image])
#⑦ChromeでURLを開く
subprocess.Popen([chrome,'https://google.com/'])

プログラムのソースコードを1つずつみていきます。

開きたいファイルパスを指定

まずはプログラムを使って開きたいファイル・フォルダを変数に指定します。
今回は5つの変数として、以下のファイルパスを指定しました。

5〜9行目:
excel = r'C:\Program Files (x86)\Microsoft Office¥Office12¥excel.exe'
images = r'C:\test\images'
image = r'C:\test\tweet.png'
paint = r'C:\Windows\system32\mspaint.exe'
chrome = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'

アプリケーションを起動する

12行目:
subprocess.Popen(excel)
subprocess.Popen()で、Excel(変数excel)を実行します。
このコマンドは実行するだけなので、アプリケーションが起動するだけです。

フォルダを開く

14行目:
subprocess.Popen(['explorer',images],shell=True)
subprocess.Popen()で、フォルダ(変数images)を開きます。

引数はexplorerでimagesフォルダを開くというコマンドになります。
shell=Trueでは、コマンドプロンプト経由で処理するようにしています。

ファイルを開く

16行目:
subprocess.Popen(['start',image],shell=True)
subprocess.Popen()で、画像ファイル(変数image)をフォトで開きます。

引数のstartは既定のプログラムで実行するという指示です。
今回の実行環境だと、画像ファイルをダブルクリックした時のようにフォトで実行されました。

指定したプログラムでファイルを開く

18行目:
subprocess.Popen([paint,image])
subprocess.Popen()で、画像ファイル(変数image)をペイント(変数paint)で開きます。

引数に指定すると、アプリケーションを使ってファイルを開くこともできます。
先程はフォトで開きましたが、今度はペイントを使って画像ファイルを開いています。

 

指定したプログラムでURLを開く

20行目:
subprocess.Popen([chrome,'https://google.com/'])
subprocess.Popen()で、URL(変数google)をGoogleChrome(変数chrome)で開きます。

引数部分にはファイルだけでなく、URLを指定してアクセスすることもできます。
今回はGoogleChromeですが、InternetExplorerなどで行うこともできます。

 

ソースコードをもう一度確認する

コメント

タイトルとURLをコピーしました