可能重複:
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(或類似的線程實現)捕獲部分輸出?
查看解決方案[這裏](http://stackoverflow.com/questions/1410849/manipulating-pipe-buffer-size-in-c-or-python) – 2009-10-05 21:43:41
這是跨平臺嗎? (它看起來不像) – Santi 2009-10-05 21:56:03
有一個基本問題的描述和一些解決方案。如果您可以修改正在運行的進程以進行刷新,那最好。如果你不能,Alex概述了應該涵蓋Unix-y和Windows平臺的pexpect/wexpect技巧。如果這些不起作用,並且你不能改變子進程向stdout和stderr寫入/刷新的方式,那麼你很可能倒黴。 – 2009-10-05 22:09:28