首頁 >後端開發 >Python教學 >如何在 Python 中同時擷取和記錄子進程的即時輸出?

如何在 Python 中同時擷取和記錄子進程的即時輸出?

Linda Hamilton
Linda Hamilton原創
2024-11-25 22:39:10550瀏覽

How Can I Simultaneously Capture and Log Live Output from a Subprocess in Python?

來自子進程命令的即時輸出

當利用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn