1
我需要逐行讀取使用回車符(\r
)進行輸出的程序的輸出。該程序運行很長時間,所以我需要在程序運行時讀取輸出。我知道如何做到這一點,當每個輸出項目出現在一個新的行(詳細here),但我似乎無法讓它與回車工作。從子進程讀取回車定界輸出
這裏是我曾經嘗試並獲得它的工作代碼(在Linux系統上運行)
import subprocess
command = ["printf", "".join(["Return count: " + str(x) + "\\r" for x in range(10)]) + "\n"]
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
buf = bytearray()
out = proc.stdout
while True:
c = out.read()
if c == b"":
break
if c == "\r":
print(buf)
buf = bytearray()
else:
buf += c
print("Done")
然而,代碼只是立即退出,打印Done
。
我想要的代碼打印:
Return code: 1
Return code: 2
Return code: 3
等什麼我需要修改,以得到這個工作?
就是這樣。謝謝!我很快就會接受。 – DonyorM
要一行一行地讀取輸出,是不是想用'輸入輸出:'? – martineau
@martineau因爲它是由回車而不是換行符分隔的。你知道一些終端程序(如apt-get的進度條)如何更新該行。我正在處理一個這樣的程序。 – DonyorM