import subprocess
run() と Popen() がある。subprocess.run(COMMAND, OPTIONS) subprocess.Popen(COMMAND, OPTIONS)
Popen() は run() より細かな制御ができる。run() には、旧メソッドの call()、check_all()、check_output() が統合されている。run() と Popen() の共通オプションshell=True|False (デフォルトは False):COMMAND を linux のコマンドのように文字列で与える。COMMAND をリストで与える。stdin=open(FILE_NAME, “rb”): コマンドの標準入力に FILE_NAME から読み出したデータを与える。stdout=open(FILE_NAME, “wb”): コマンドの標準出力を FILE_NAME に書き出す。stderr=open(FILE_NAME, “wb”): コマンドの標準エラーを FILE_NAME に書き出す。stdin、stdout、stderr についてopen() の代わりに、subprocess.PIPE を指定すると、画面に出力する。open() の代わりに、subprocess.DEVNULL を指定すると、出力を破棄する。timeout=X: タイムアウトの秒数 X を指定する (ネットワークを利用するコマンド)。text=True|False: PIPE で取得したデータをテキスト型として出力する (デフォルトは False でバイト型)。run() を単純に実行する場合:import subprocess obj_proc=subprocess.run(["ls", "-l"])
import subprocess obj_proc=subprocess.run(["ls", "-l"], stdout=open("test.log", "w"))
Popen() を使う場合:import subprocess obj_proc = subprocess.Popen(["ls", "-l"], stdout=open("test.log", "w"))
Popen() で画面に出力を表示する場合:import subprocess obj_proc = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, text=True) obj_proc.communicate()
| 終了ステータス | 出力結果 | エラー例外 | |
|---|---|---|---|
run() での引数や属性 | .returncode | .stdout | check |
call() | ○ | ||
check_call() | ○ | ||
check_output() | ○ | ○ |
run() のオプションを切り替えることで同じ挙動になる。run() では処理できなくなるので、このメソッドを使うことになる。