文書の過去の版を表示しています。
Python モジュール: subprocess
概要
- 複数のプロセスを制御するモジュール
- 以下の場合に使う
- 関数を別プロセスで並列で処理したい
- 外部プログラムを呼び出したい
使い方
モジュールの定義
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):- True の場合、実行コマンド
COMMANDを linux のコマンドのように文字列で与える。- 引数の区切りをスペースとしているため、スペースを含む引数を与えると、誤認識する。
- False の場合、実行コマンド
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について- ファイルの扱いは byte 型の方が問題が起こりにくい。
open()の代わりに、subprocess.PIPEを指定すると、画面に出力する。open()の代わりに、subprocess.DEVNULLを指定すると、出力を破棄する。
timeout = X: タイムアウトの秒数Xを指定する (ネットワークを利用するコマンド)。
run() と旧メソッドの違い
| 終了ステータス | 出力結果 | エラー例外 | |
|---|---|---|---|
run() での引数や属性 | .returncode | .stdout | check |
call() | ○ | ||
check_call() | ○ | ||
check_output() | ○ | ○ |
- 旧メソッドは現在でも使えるが、
run()のオプションを切り替えることで同じ挙動になる。
Popen.communicate()
- 標準出力、標準エラーをタプルにして返す。
- 標準出力、標準エラーの出力量が多い場合、
run()では処理できなくなるので、このメソッドを使うことになる。 - リアルタイムの出力管理や対話処理は扱えない。