python:subprocess

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
python:subprocess [2020/05/22 11:54] – [run() と旧メソッドの違い] mumeiyamibitopython:subprocess [2021/10/12 14:41] (現在) mumeiyamibito
行 18: 行 18:
   * ''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> 
 +import subprocess 
 +obj_proc=subprocess.run(["ls", "-l"]) 
 +</code> 
 +    * ファイルに結果を出力する場合:\\ <code python> 
 +import subprocess 
 +obj_proc=subprocess.run(["ls", "-l"], stdout=open("test.log", "w")) 
 +</code> 
 +    * ''Popen()'' を使う場合:\\ <code python> 
 +import subprocess 
 +obj_proc = subprocess.Popen(["ls", "-l"], stdout=open("test.log", "w")) 
 +</code> 
 +    * ''Popen()'' で画面に出力を表示する場合:\\ <code python> 
 +import subprocess 
 +obj_proc = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE, text=True) 
 +obj_proc.communicate() 
 +</code>
 ==== run() と旧メソッドの違い ==== ==== run() と旧メソッドの違い ====
  
行 41: 行 59:
  
   * 旧メソッドは現在でも使えるが、''run()'' のオプションを切り替えることで同じ挙動になる。   * 旧メソッドは現在でも使えるが、''run()'' のオプションを切り替えることで同じ挙動になる。
 +
 +==== Popen.communicate() ====
 +  * 標準出力、標準エラーをタプルにして返す。
 +  * 標準出力、標準エラーの出力量が多い場合、''run()'' では処理できなくなるので、このメソッドを使うことになる。
 +  * リアルタイムの出力管理や対話処理は扱えない。
 +
 ===== 参考サイト ===== ===== 参考サイト =====
   * [[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>プログラミング}}
  
  • python/subprocess.1590116045.txt.gz
  • 最終更新: 2020/05/22 11:54
  • by mumeiyamibito