Pythonでsubprocessを用いてshellコマンドを実行する

PythonからJavaのプログラムを直接呼び出したくなる場面があったので調べたところsubprocessという標準ライブラリを用いるとできるらしい。

import subprocess

if __name__ == '__main__':
    result = subprocess.Popen("java -cp ./path/to file_1".strip().split(), stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    if not result.stderr.read():
        print(result.stdout.read())

このように実行すると別プロセスでシェルコマンドが実行されるがpythonは終了まで結果を待機する同期的な実行となる。subprocess.PIPEを用いることで標準出力や標準エラー出力をパイプを用いてresult変数に格納することが可能となる。

上の例ではエラーを吐かずに正常終了した場合のみ標準出力の結果を出力するような処理になっている。