python subprocess
subprocessモジュール
docs
https://docs.python.org/ja/3/library/subprocess.html
実際に使用した例
https://github.com/hitto-hub/discord-minecraft-bot
https://github.com/hitto-hub/docker-get-logs-to-discord-webhook
まとめ
subprocess.run とsubprocess.check_output の違い
subprocess.run と subprocess.check_output は、Python の subprocess モジュールでコマンドを実行するために使用される関数ですが、それぞれ異なる特徴と使い方があります。
subprocess.run
subprocess.run は、Python 3.5 以降で推奨される方法であり、より汎用的です。この関数は、指定したコマンドを実行し、その終了を待ちます。実行結果として、subprocess.CompletedProcess オブジェクトを返します。このオブジェクトには、以下のような属性があります:
使用例:
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
subprocess.check_output
subprocess.check_output は、指定したコマンドを実行し、その標準出力を返します。この関数は、コマンドが正常に終了しない場合、例外 (subprocess.CalledProcessError) をスローするため、エラーハンドリングが容易になります。また、標準出力の内容を簡単に取得できるのが特徴です。
使用例:
import subprocess
output = subprocess.check_output(['ls', '-l'], text=True)
print(output)
違いのまとめ
- subprocess.run は subprocess.CompletedProcess オブジェクトを返します。
- subprocess.check_output は標準出力の内容を文字列として返します。
- subprocess.run はコマンドがエラーを返した場合でも例外をスローしません。ただし、check=Trueを指定すると、例外をスローします。
- subprocess.check_output はコマンドがエラーを返した場合に subprocess.CalledProcessError をスローします。
- subprocess.run は、標準出力や標準エラー出力のキャプチャ、入力のパイプライン設定など、より多くのオプションが用意されています。
- subprocess.check_output は、標準出力の取得に特化しています。
このように、目的や必要な機能に応じて使い分けることが重要です。
← Go home