'23/11/04更新:python3.7以上に対応したコードに刷新しました。
本記事では、Pythonスクリプト内で、外部プロセス(子プロセス, サブプロセス)を実行したい場合の雛形コードを載せました。外部プロセスのコマンド処理の完了を待つ場合、「subprocess.run()」を使用します。標準出力やエラーを戻り値として取得できます。
■本プログラム
下記は、複数のcsvファイルを取得した後に、それら個々のファイルに対してpythonスクリプト(ここでは便宜上sub_script.pyという任意のプログラム)を実行するプログラム例です。
import glob
import subprocess
file_list = glob.glob('./dir_csv/*.csv')
print(file_list)
for file_path in file_list:
print(file_path)
cmd_list = ['python', 'sub_script.py', file_path]
try:
result = subprocess.run(
cmd_list,
shell = False,
check = True,
capture_output = True,
text = True,
)
except subprocess.CalledProcessError as e:
print(f"Error: Command '{e.cmd}' returned non-zero exit status {e.returncode}")
print(f"Output: {e.stdout}")
print(f"Error Output: {e.stderr}")
一方、コマンド処理を待たずに処理を続行したい場合はPopenを使用します。
subprocess.Popen()
この場合、サブプロセス(子プロセス)として残ります。終了させるには後のPythonコードで終了させるか、手動で終了させる必要があります。
そうでもなく、単にシェルコマンドを実行させたいだけの場合は、次のようにします。
subprocess.call()
(参考)引数に辞書型を渡したい場合には、一度JSON形式の文字列へ変換します。雛形コードは下記を参照ください。
hk29.hatenablog.jp
以上
<広告>
リンク
リンク