1. はじめに
Pythonのsubprocessの使い方について、自分用のメモとして残したいと思います。subprocessの使い方に関しては、以下のYOUTUBEがわかりやすかったです。subprocessでは、
といったことが可能になります。
マルチプロセスの内容については、以下の動画がわかりやすかったため、割愛させていただきます。
2. subprocessの使い方
2.1. 基本的な書き方について
2章のコードは、さきほどのYOUTUBEの内容を参考にさせていただきました。また、ここでは、Ubuntuを利用しています。
例えば、こちらのコードで、現在のパスにあるファイルの一覧を参照することができます。
subprocess.run(["ls"])
また、入力が複数ある場合は、リストにして、以下のようにします。
subprocess.run(["sleep","10s"])
2.2. 戻り値が欲しい場合
例えば、以下のようにすることで、戻り値を得ることができます。上の動画では3パターン紹介されていました。以下のどのパターンでも同じ結果を得ることができます。このスクリプトをsubprocessTest.py
としています。
import subprocess # Pattern1 print("===========") print("subprocess start!") a = subprocess.check_output(["ls"]) print(a.decode()) print("subprocess end") # Pattern2 print("===========") print("subprocess start!") a = subprocess.run(["ls"], stdout = subprocess.PIPE) print(a.stdout.decode()) print("subprocess end") # Pattern3 print("===========") print("subprocess start!") a = subprocess.getoutput(["ls"]) print(a) print("subprocess end")
実行したときの結果は以下のようになりました。同じ結果が3回得られていることがわかります。
2.3. 非同期処理について
subprocessの計算結果を待たずに、非同期で処理を行うこともできます。例えば、subprocessの処理をしながら、その下のコマンドを実行していくというった感じです。
非同期処理では、subprocess.Popenを使います。例えば以下の記事がわかりやすかったです。ここではコードについては割愛させていただきます。
3. Windowsにて、exeファイルを実行する
2章ではUbuntuにてsubprocessを用いていました。ここでは、Windowsで、Pythonのスクリプトから、exeファイルを実行してみたいと思います。
実行ファイルの例として、動画の処理などでよく用いられる、FFmpegを用いたいと思います。内容やインストールの方法については、以下の記事がわかりやすかったです。
冒頭で述べた通り、subprocessでは、Pythonからコマンドプロンプトを使うことができます。そのため、FFmpegといったexeファイルをPythonから動かすことができます。以下のように行うことができます。
import subprocess cmd1 = 'D:/hatena/ffmpeg-master-latest-win64-gpl-shared/bin/ffmpeg.exe -i sample.mp4 -r 60 image%04d.png' subprocess.run(cmd1)
このコマンドでは、動画から静止画に切り出すことができます。
こちらのページにサンプルの動画などをアップロードしています。何かの役に立てば幸いです。
簡単に、Pythonのsubprocessについての備忘録を残しました。間違いなどがございましたら教えていただけると嬉しいです。