Pythonのsubprocess
モジュールは、新しいプロセスを生成し、その入出力/エラーパイプに接続し、戻りコードを取得することができます。このモジュールは、os.system
やos.spawn*
などの古いモジュールや関数を置き換えることを目指しています。
subprocess.run()
とsubprocess.Popen()
は、このモジュールの主要な関数であり、それぞれ異なる使用ケースに対応しています。
subprocess.run()
は、コマンドを実行し、その完了を待つ関数です。この関数は、コマンドの実行とその結果の取得が必要な場合に使用します。
一方、subprocess.Popen()
は、より高度な使用ケースに対応しています。subprocess.Popen()
は、プロセスを生成するだけで、終了を待たないという特徴があります。そのため、プロセスが終了するまで他の処理を続けることができます。
以下に、それぞれの関数の使用例を示します。
import subprocess
# subprocess.run()の使用例
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
# subprocess.Popen()の使用例
p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
print(p.communicate()[0].decode('utf-8'))
これらの関数を適切に使用することで、Pythonから外部コマンドを効率的に制御することができます。