使用subprocess.Popen 呼叫子進程時,我們可以同時儲存其輸出用於日誌記錄並將其實時顯示在終端。
選項1:使用迭代器
import subprocess import sys with open("test.log", "wb") as f: process = subprocess.Popen(your_command, stdout=subprocess.PIPE) for c in iter(lambda: process.stdout.read(1), b""): sys.stdout.buffer.write(c) f.buffer.write(c)
選項2:使用讀取器和寫入器
import io import time import subprocess import sys filename = "test.log" with io.open(filename, "wb") as writer, io.open(filename, "rb", 1) as reader: process = subprocess.Popen(command, stdout=writer) while process.poll() is None: sys.stdout.write(reader.read()) time.sleep(0.5) # Read the remaining sys.stdout.write(reader.read())
選項3:自訂解決方案
ret_val = subprocess.Popen(run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True) while not ret_val.poll(): log_file.flush()
在另一個終端, run:
tail -f log.txt
使用這些方法,您可以捕捉子進程輸出,同時即時顯示它,確保日誌記錄和進度監控。
以上是如何在 Python 中同時擷取和顯示子進程的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!