我已經搜索了一個多小時並在這方面進行了實驗,似乎沒有辦法同時執行'here document'和逐行獲取輸出:Python Popen _with_實時輸入/輸出控制
python = '''var="some character text"
print(var)
print(var)
exit()
'''
from subprocess import Popen, PIPE, STDOUT
import shlex
def run_process(command):
p = Popen(shlex.split(command), stdin=PIPE, stdout=PIPE, stderr=STDOUT)
p.stdin.write(python)
while True:
output = p.stdout.readline()
if output == '' and p.poll() is not None:
break
if output:
print output.strip()
rc=p.poll()
return rc
run_process("/usr/bin/python")
上述代碼無限期掛起。是的,這是一條吃蛇尾的蛇,但它只是爲了證明這個概念。
問題是我的子進程需要很長時間才能運行,我需要能夠看到輸出而不用等待幾小時才能確定是否有錯誤。任何提示?謝謝。
你確定它的'stdin.readline'而不是相反 – rakesh
''process.poll的otherway()''應該是一個錯誤(在兩個地方) - 你沒有這個名字的變量。 – jasonharper
不知道我關注。有一個p.stdin.write()調用和一個p.stdout.readline()調用,但沒有發佈代碼中的stdin.readline()。另外,我沒有process.poll() - 我有一個poll()方法的對象p。 – signal7