我使用subprocess.Popen
(在POSIX系統上爲Python 2.x)調用子進程。我希望能夠使用Python的readline()
文件對象函數讀取子進程的輸出。但是,Popen.stdout
中的可用流沒有出現readline()
方法。如何將readline()與subprocess返回的管道一起使用.Popen
使用想法從Python readline from pipe on Linux,我試過如下:
p = subprocess.Popen(
[sys.executable, "child.py"],
stdout=subprocess.PIPE)
status = os.fdopen(p.stdout.fileno())
while True:
s = status.readline()
if not s:
break
print s
然而,這種方法的問題是,既的p.stdout
對象和新status
對象試圖關閉一個文件描述符。這最終導致:
close failed: [Errno 9] Bad file number
有沒有辦法創建一個文件對象「包裝」一個以前創建的文件類對象?
你如何得到具有'.fileno()'但沒有'.readline()'方法的'p.stdout'? – jfs 2012-01-24 04:43:53
@ J.F.Sebastian:這是一個很好的問題。我只是再試一次,'p.stdout.readline()'工作正常。可能是我錯誤地嘗試了'p.readline()',這有點令人尷尬。 – 2012-01-24 05:16:02