2011-08-11 42 views
2

私はサブプロセスと言われています.Popenはブロックされないので、プロセスはバックグラウンドで実行され、Pythonプログラムは終了するまで待機しません。しかし、これは私が望むものではありません。プロセスを終了して終了するまでの最良の方法

私は私のプログラムコールを外部のPythonプログラムに持っていますが、私は制御できません。リターンコードを返さず、実行し、ファイルを操作し、終了します。私はこれを呼び出して、その呼び出しが完了したときにのみ私のpythonプログラムを続行します。これはどうすればいいですか?

答えて

1

ベストな方法は、communicateメソッドを使用することですメソッドをサブプロセスから取得します。

subprocess.call(* popenargs、** kwargs) 引数を指定してコマンドを実行します。コマンドが完了するのを待ってから、 はreturncode属性を返します。

ほとんどの時間

参照→http://docs.python.org/library/subprocess.html#subprocess.call

+0

?私がパイプで作業する場合のみ。私がちょうどコマンドを実行し、それを待っていたい場合、私はそれを必要としません。 – glglgl

+0

ほとんどの場合、プロセスとパイプの出力を無視しないでください(私の意見では)これを処理する最も便利な方法です。そしてそれは 'コミュニケーション'を使うことにつながります。 – tauran

+0

はい、いいえ。通常はyesですが、プロセスがメガバイトのデータを出力する(または期待している)場合、 'communicate()'のように一度にデータをすべて取り込むのではなく、ピース単位で取得するほうが大切です。 – glglgl

関連する問題