2010-07-29 41 views
1

我有這個程序,當這樣在控制檯上執行:子過程無法捕獲STDOUT - 程序可能會做什麼?

prog 1> output 2> error 

有有效的輸出和錯誤。但是,當我使用子進程模塊執行相同的程序時。

p = subprocess.Popen(['prog'],stdout=PIPE, stderr=PIPE,close_fds=True) 
out, err = p.communicate() 

out是空的,但err是正確的。這裏會發生什麼? 我可以做一個os.system並指導輸出和錯誤。但直到最近我一直依靠子過程。

可能是什麼問題?這僅在Linux上嘗試過。不在Windows上。 `

回答

1

您是否在Windows上試用?

使用close_fds是 平臺依賴,根據subprocess.Popen() doc

如果close_fds爲真,除了0,1和2之外的所有文件描述符將在執行子進程之前關閉。 (僅適用於Unix)。或者,在Windows上,如果close_fds爲true,那麼子進程將不會繼承任何句柄。 請注意,在Windows上,您無法將close_fds設置爲true,並通過設置stdin,stdout或stderr來重定向標準句柄。

+0

不,我沒有嘗試在Windows上。我在Linux上嘗試這個。 感謝您的回覆。 – 2010-07-29 05:24:08

+0

信息的每一點幫助... – gimel 2010-07-29 05:32:43

0

只是想你的代碼和我的作品:

>>> p = subprocess.Popen(['ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, 
close_fds=True) 
>>> out, err = p.communicate() 
>>> out 
'build\nCode\n...' 
>>> err 
'' 

一)確保程序正確調用。

b)您是否正確導入PIPE?

+0

是的,程序被正確調用,PIPE也正確導入。 這不是問題在這些目的。不管怎麼說,多謝拉。 – 2010-07-30 01:09:21

相關問題