両方とも前のリビジョン 前のリビジョン | |
python:subprocess [2020/06/23 14:26] – [プロセス実行メソッド] mumeiyamibito | python:subprocess [2021/10/12 14:41] (現在) – mumeiyamibito |
---|
* ''run()'' には、旧メソッドの ''call()''、''check_all()''、''check_output()'' が統合されている。 | * ''run()'' には、旧メソッドの ''call()''、''check_all()''、''check_output()'' が統合されている。 |
* ''run()'' と ''Popen()'' の共通オプション | * ''run()'' と ''Popen()'' の共通オプション |
* ''shell = True | False'' (デフォルトは False): | * ''shell=True|False'' (デフォルトは False): |
* True の場合、実行コマンド ''COMMAND'' を linux のコマンドのように文字列で与える。 | * True の場合、実行コマンド ''COMMAND'' を linux のコマンドのように文字列で与える。 |
* 引数の区切りをスペースとしているため、スペースを含む引数を与えると、誤認識する。 | * 引数の区切りをスペースとしているため、スペースを含む引数を与えると、誤認識する。 |
* False の場合、実行コマンド ''COMMAND'' をリストで与える。 | * False の場合、実行コマンド ''COMMAND'' をリストで与える。 |
* ワイルドカードでの指定ができなくなる。 | * ワイルドカードでの指定ができなくなる。 |
* ''stdin = open(FILE_NAME, "rb")'': コマンドの標準入力に ''FILE_NAME'' から読み出したデータを与える。 | * ''stdin=open(FILE_NAME, "rb")'': コマンドの標準入力に ''FILE_NAME'' から読み出したデータを与える。 |
* ''stdout = open(FILE_NAME, "wb")'': コマンドの標準出力を ''FILE_NAME'' に書き出す。 | * ''stdout=open(FILE_NAME, "wb")'': コマンドの標準出力を ''FILE_NAME'' に書き出す。 |
* ''stderr = open(FILE_NAME, "wb")'': コマンドの標準エラーを ''FILE_NAME'' に書き出す。 | * ''stderr=open(FILE_NAME, "wb")'': コマンドの標準エラーを ''FILE_NAME'' に書き出す。 |
* ''stdin''、''stdout''、''stderr'' について | * ''stdin''、''stdout''、''stderr'' について |
* ファイルの扱いは byte 型の方が問題が起こりにくい。 | * ファイルの扱いは byte 型の方が問題が起こりにくい。 |
* ''open()'' の代わりに、''subprocess.PIPE'' を指定すると、画面に出力する。 | * ''open()'' の代わりに、''subprocess.PIPE'' を指定すると、画面に出力する。 |
* ''open()'' の代わりに、''subprocess.DEVNULL'' を指定すると、出力を破棄する。 | * ''open()'' の代わりに、''subprocess.DEVNULL'' を指定すると、出力を破棄する。 |
* ''timeout = X'': タイムアウトの秒数 ''X'' を指定する (ネットワークを利用するコマンド)。 | * ''timeout=X'': タイムアウトの秒数 ''X'' を指定する (ネットワークを利用するコマンド)。 |
| * ''text=True|False'': PIPE で取得したデータをテキスト型として出力する (デフォルトは False でバイト型)。 |
* 例 | * 例 |
* ''run()'' を単純に実行する場合:\\ <code python> | * ''run()'' を単純に実行する場合:\\ <code python> |
import subprocess | import subprocess |
obj_proc = subprocess.run(["ls", "-l"]) | obj_proc=subprocess.run(["ls", "-l"]) |
</code> | </code> |
* ファイルに結果を出力する場合:\\ <code python> | * ファイルに結果を出力する場合:\\ <code python> |
import subprocess | import subprocess |
obj_proc = subprocess.run(["ls", "-l"], stdout = open("test.log", "w")) | obj_proc=subprocess.run(["ls", "-l"], stdout=open("test.log", "w")) |
</code> | </code> |
* ''Popen()'' を使う場合:\\ <code python> | * ''Popen()'' を使う場合:\\ <code python> |
import subprocess | import subprocess |
obj_proc = subprocess.Popen(["ls", "-l"], stdout = open("test.log", "w")) | obj_proc = subprocess.Popen(["ls", "-l"], stdout=open("test.log", "w")) |
</code> | </code> |
* ''Popen()'' で画面に出力を表示する場合:\\ <code python> | * ''Popen()'' で画面に出力を表示する場合:\\ <code python> |
import subprocess | import subprocess |
obj_proc = subprocess.Popen(["ls", "-l"], stdout = subprocess.PIPE) | obj_proc = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, text=True) |
obj_proc.communicate() | obj_proc.communicate() |
</code> | </code> |
===== 参考サイト ===== | ===== 参考サイト ===== |
* [[https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4 | subprocessについてより深く(3系,更新版) - Qiita]] | * [[https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4 | subprocessについてより深く(3系,更新版) - Qiita]] |
| * [[https://dev.classmethod.jp/articles/python-subprocess-shell-command/ | Pythonからシェルコマンドを実行!subprocessでサブプロセスを実行する方法まとめ | DevelopersIO]] |
| |
{{tag>プログラミング}} | {{tag>プログラミング}} |
| |