我正在試圖與使用python subprocess.Popen()調用的子進程交談。在我真正的代碼中,我正在實現一種IPC,所以我想寫一些數據,讀取響應,寫入更多數據,讀取響應等等。正因爲如此,我不能使用Popen.communicate(),否則它適用於簡單的情況。閱讀/寫入Popen()子進程
此代碼顯示我的問題。它甚至從來沒有得到第一個反應,掛在第一個「閱讀結果」。爲什麼?我如何能夠按照我的預期進行這項工作?
import subprocess
p = subprocess.Popen(["sed", 's/a/x/g'],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE)
p.stdin.write("abc\n")
print "Reading result:"
print p.stdout.readline()
p.stdin.write("cat\n")
print "Reading result:"
print p.stdout.readline()
的確如此!由於某種原因,我的sed使用-u作爲「無緩衝」,而不是-l,但它的工作原理完全相同。這解決了我的示例代碼,但不幸的是不是我真正的代碼,因爲實際的命令不是sed,而是另一個python程序。雖然你的回答很好,但你指出了這個問題。 – 2012-04-28 15:39:23
是的,問題解決了。問題是輸出緩衝結果。在我的子進程中做一個簡單的stdout.flush()解決了這個問題。謝謝! – 2012-04-28 15:51:15