簡體   English   中英

從Popen獲取實時輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM