來自子進程命令的即時輸出
當利用subprocess.Popen 執行外部命令時,獲取即時輸出流和輸出變得具有挑戰性用於日誌記錄和錯誤檢查的儲存。本文探討了解決此問題的技術,提供了同時即時擷取和顯示輸出的解決方案,同時保持將其寫入日誌檔案的能力。
解決方案1:基於迭代器的方法
一種方法涉及從讀取函數建立迭代器並將輸出寫入標準輸出和日誌file:
import subprocess import sys with open("log.txt", "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)
在Python 3中,將「w」替換為「wb」以支援二進位寫入。
解決方案2:讀取器和寫入器檔案方法
或者,可以使用讀取器和寫入器檔案來分離標準輸出和檔案write :
import io import subprocess import sys filename = "log.txt" 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())
此方法確保資料同時寫入標準輸出和日誌文件,同時提供非同步讀寫的優點。
以上是如何在 Python 中同時擷取和記錄子進程的即時輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!