2013-04-18 15 views
0

結果在我的python腳本的snipet之下,我認爲TEMP2不會等待溫度完成運行,輸出可以是大的,但僅僅是文本。這會從temp中截斷結果('out'),它會停止中線。從溫度'出'工作正常,直到溫度2添加。我嘗試添加time.wait()以及subprocess.Popen.wait(TEMP)。這些都允許臨時運行到完成,這樣「出」不被截斷,但讓沒有「OUT2」擾亂鏈接過程。有任何想法嗎?Python。 subprocess.Popen的第二步截斷的第一

temp = subprocess.Popen(call, stdout=subprocess.PIPE) 
#time.wait(1) 
#subprocess.Popen.wait(temp) 
temp2 = subprocess.Popen(call2, stdin=temp.stdout, stdout=subprocess.PIPE) 
out, err = temp.communicate() 
out2, err2 = temp2.communicate() 
+0

你需要從'temp'輸出在你的腳本,並管道它'temp2'(像'tee'實用程序)或者你只想管它到'temp2'? – jfs 2013-05-01 00:33:45

回答

0

根據Python Docs communications()可以接受一個流作爲輸入發送。如果更改的temp2stdinsubprocess.PIPE,把out在溝通(),數據正確管道。

#!/usr/bin/env python 
import subprocess 
import time 

call = ["echo", "hello\nworld"] 
call2 = ["grep", "w"] 

temp = subprocess.Popen(call, stdout=subprocess.PIPE) 

temp2 = subprocess.Popen(call2, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
out, err = temp.communicate() 
out2, err2 = temp2.communicate(out) 

print("Out: {0!r}, Err: {1!r}".format(out, err)) 
# Out: b'hello\nworld\n', Err: None 
print("Out2: {0!r}, Err2: {1!r}".format(out2, err2)) 
# Out2: b'world\n', Err2: None 
+0

它加載從整體輸出'temp'到內存中,但OP說,輸出可能很大。如果您不介意將輸出加載到內存中,您可以使用'subprocess.check_output()'。 – jfs 2013-05-01 00:34:53