複合体を提出するcmd実行可能ファイルへの完全なファイルパスで作られた文字列、複数のフラグ、引数、パラメータ、入出力はshell = Trueそうでなければsubprocess.Popen実行可能ファイルへの単純なパス(ファイルパスにスペースを入れない)より複雑なものは理解できません。私の例ではShell = TrueのPythonのSubprocess.Popen。完了するまで待つ
私はかなり長いCMDあります
cmd = " '/Application/MyApp.app/Contents/MacOS/my_executable' '/Path/to/input/files' -some -flags -here -could -be -a -lot '/full/path/to/output/files' "
はパスして、それを見つけることができないという何かに文句を言いエラーにsubprocess.Popen「結果には、このCMDを送信します。
ので、代わりの使用:
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
check_callを働き非常によく思わ:
proc = subprocess.check_call(cmd, shell=True)
興味深い、唯一シェル後真
shell=True
に供給されたCMDと連携subprocess.check_callに設定されています。
副作用は、subprocess.check_call(cmd、shell = True)が最初に終了するのを待たずに実行されているようです。
コードは、残りの実行がsubprocess.check_call(cmd, shell=True)
の結果に依存するように設計されています。
私は、とにかくsubprocess.check_call(cmd、shell = True)が終了するまでコード実行を強制することがあるのだろうかと思います。前もって感謝します!
'shell = False'と' subprocess.Popen'を実行しているときに 'cmd'をリストに変換しようとしましたか? [Popenコンストラクタのドキュメント](http://docs.python.org/2/library/subprocess.html#)にあるサンプルコードのように、 'shlex.split()'関数を使ってそれを行うことができますポップンコンストラクタ)。 – miikkas