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.call: コマンドを実行し、終了コードを返す。
  • subprocess.check_call: コマンドを実行し、成功を確認。失敗時に例外をスロー。
  • subprocess.check_output: コマンドを実行し、標準出力を返す。失敗時に例外をスロー。
  • subprocess.run: より柔軟で、標準出力のキャプチャ、エラーチェックなど、多機能なオプションを提供。
  • subprocess.runsubprocess.check_output の違い

    subprocess.run と subprocess.check_output は、Python の subprocess モジュールでコマンドを実行するために使用される関数ですが、それぞれ異なる特徴と使い方があります。

    subprocess.run

    subprocess.run は、Python 3.5 以降で推奨される方法であり、より汎用的です。この関数は、指定したコマンドを実行し、その終了を待ちます。実行結果として、subprocess.CompletedProcess オブジェクトを返します。このオブジェクトには、以下のような属性があります:

  • args: 実行したコマンドの引数リスト
  • returncode: コマンドの終了コード
  • stdout: 標準出力の内容(capture_output=True または stdout=subprocess.PIPE を指定した場合)
  • stderr: 標準エラー出力の内容(capture_output=True または stderr=subprocess.PIPE を指定した場合)
  • 使用例:

    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