103

2 つ以上のサブ プロセスを作成するメイン プロセスがあります。すべてのサブ プロセスが操作を終了して終了するまで、メイン プロセスを待機させたいですか?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...
4

2 に答える 2

140

Popenオブジェクトには、このために正確に定義されたメソッドがあります。.wait()特定のサブプロセスの完了を待つ(さらに、その終了ステータスを再調整する)。

この方法を使用すると、プロセスゾンビが長時間横になっているのを防ぐことができます。

subprocess.call()(または、を使用subprocess.check_call()して呼び出しと待機を行うこともできます。プロセスでIOが必要ない場合は、それで十分かもしれません。ただし、2つのサブプロセスが並行して実行されることになっている場合は、これはオプションではない可能性があります。 、( call()/ check_call()。)ではありません

待機するサブプロセスが複数ある場合は、次のことができます。

exit_codes = [p.wait() for p in p1, p2]

これは、すべてのサブプロセスが終了するとすぐに戻ります。次に、評価できるリターンコードのリストがあります。

于 2013-02-27T09:10:44.647 に答える
35
subprocess.call

Automatically waits , you can also use:

p1.wait()
于 2013-02-27T08:54:34.343 に答える