[英]get real time output from Popen
# cmd = "python subscript.py"
cmd = "ping localhost -n 10"
ofile =open("C:\file.log","w")
sp = subprocess.Popen(cmd,bufsize = 1, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
while True:
sp.poll()
line = sp.stdout.readline()
#eline = sp.stderr.readline()
if line:
print line
ofile.write(line)
#if eline:
# print eline
# ofile.write(" ERROR: "+line)
# if (line == "" and eline == ""):
if (line == ""):
break
我正在嘗試從子流程中獲取輸出,並使用上面的代碼將其保存到日志文件中。 它適用於ping localhost -n 10
。 但是,當使用它調用subscript.py
,我無法實時獲取subscript.py
的輸出。 在subscript.py
終止后,我將獲得所有輸出。 有什么建議嗎? 另外,我必須注釋掉eline = sp.stderr.readline()
才能使其正常工作。 知道為什么有些代碼不能給我實時輸出subscript.py
嗎?
subscript.py:
import time
i=0
while (i<5):
time.sleep(1)
i += 1
print "ouput:",i
正如魔方提到的,之前也有幾個類似的問題。 我嘗試了所有發現的問題,但沒有一個解決我的問題。 希望有人指出調用subscript.py
時其不起作用的原因。
編輯:這里的問題:subscript.py的輸出直到其自身終止才刷新。 並且subscript.py沒有任何stderr,因此調用sp.stderr.readline()會導致無限等待。 解決方案:刷新所有stderr的subscript.py輸出,我只使用stderr = subprocess.STDOUT重定向到stdout。
您是否嘗試過在print
語句后在子sys.stdout.flush()
調用sys.stdout.flush()
? 您可能正在遇到輸出緩沖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.