2016-12-07 20 views
1

私の理解は、subprocess.popenは非同期呼び出しであり、呼び出しに.wait()を追加すると同期がとれることです。最初の呼び出しが完了した後、2番目のpopen呼び出しが実行されますか?pythonのサブプロセスpopen非同期の理解

proc1 = subprocess.Popen(first_command, stdout=subprocess.PIPE, shell=True) 
proc2 = subprocess.Popen(second_command, stdin=proc1.stdout, stdout=self.fw, shell=True) 

私はそれが待機を(使用する必要があります時期を決定しようとしている)と、例えば、上記の例でpopenのステートメントを使用する場合には、エラーが発生する理由:

proc1 = subprocess.Popen(first_command, stdout=subprocess.PIPE, shell=True).wait() # throws exception 
proc2 = subprocess.Popen(second_command, stdin=proc1.stdout, stdout=self.fw, shell=True).wait() # seems ok 

答えて

1

裁判の多くの後とエラー、他の投稿やドキュメントの再読み込みなど、これがうまくいきます。

proc1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE, shell=True) 
# don't put wait here because of potential deadlock if stdout buffer gets full and we're waiting for proc2 to consume buffer then we're deadlocked 
proc2 = subprocess.Popen(cmd2, stdin=proc1.stdout, stdout=self.fw, shell=True) 
# ok to wait here 
proc2.wait() 
# ok to test return code after proc2 completes 
if proc2.returncode != 0: 
    print('Error spawning cmd2') 
else: 
    print('Success spawning cmd2') 

これは他の人にとって役に立ちます。

関連する問題