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()
では処理できなくなるので、このメソッドを使うことになる。