kentaPtの日記

主に画像解析のことなどの勉強記録として投稿します。もし何かございましたら、github (https://github.com/KentaItakura)などからご連絡いただけると幸いです。

Pythonのsubprocessモジュールの実行について

1. はじめに

Pythonのsubprocessの使い方について、自分用のメモとして残したいと思います。subprocessの使い方に関しては、以下のYOUTUBEがわかりやすかったです。subprocessでは、

といったことが可能になります。

マルチプロセスの内容については、以下の動画がわかりやすかったため、割愛させていただきます。

www.youtube.com

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を使います。例えば以下の記事がわかりやすかったです。ここではコードについては割愛させていただきます。

tarovlog.com

3. Windowsにて、exeファイルを実行する

2章ではUbuntuにてsubprocessを用いていました。ここでは、Windowsで、Pythonスクリプトから、exeファイルを実行してみたいと思います。

 実行ファイルの例として、動画の処理などでよく用いられる、FFmpegを用いたいと思います。内容やインストールの方法については、以下の記事がわかりやすかったです。

qiita.com

冒頭で述べた通り、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)

このコマンドでは、動画から静止画に切り出すことができます。
こちらのページにサンプルの動画などをアップロードしています。何かの役に立てば幸いです。

github.com

簡単に、Pythonのsubprocessについての備忘録を残しました。間違いなどがございましたら教えていただけると嬉しいです。

参考文献

qiita.com