2009-10-05 58 views
2

可能重複:
Bypassing buffering of subprocess output with popen in C or Python獲得來自POPEN部分輸出和錯誤運行無限期

我建立各地應該無限期地運行服務器CMD行腳本的包裝。 我需要做的是在不等待子進程完成的情況下獲取當前的stout。

我的意思是,如果我運行下面的,一切工作正常:

ls = Popen(["ls"], stdout=PIPE) 
output = ls.stdout.read() 

但是,如果我做同樣與indefinitelly運行的程序:

server = Popen(["python","-m","SimpleHTTPServer"], stdout=PIPE) 
output = server.stdout.read() 

它不會再回來了.. 。

更新:即使

output = server.stdout.read(1) 

掛起...

你知道是否有辦法以獨立於操作系統的方式從Popen(或類似的線程實現)捕獲部分輸出?

+0

查看解決方案[這裏](http://stackoverflow.com/questions/1410849/manipulating-pipe-buffer-size-in-c-or-python) – 2009-10-05 21:43:41

+0

這是跨平臺嗎? (它看起來不像) – Santi 2009-10-05 21:56:03

+0

有一個基本問題的描述和一些解決方案。如果您可以修改正在運行的進程以進行刷新,那最好。如果你不能,Alex概述了應該涵蓋Unix-y和Windows平臺的pexpect/wexpect技巧。如果這些不起作用,並且你不能改變子進程向stdout和stderr寫入/刷新的方式,那麼你很可能倒黴。 – 2009-10-05 22:09:28

回答

-1

我想那個read()會返回整個內容嗎?如果您在循環中讀取固定大小的塊,您可能會獲得更好的結果。

+0

對不起,忘了提及這也不起作用:server.stdout.read(1)也掛起。 – Santi 2009-10-05 21:42:50