首頁 > 後端開發 > Python教學 > 如何捕捉即時子流程輸出並同時記錄它?

如何捕捉即時子流程輸出並同時記錄它?

Linda Hamilton
發布: 2024-12-02 10:48:15
原創
1035 人瀏覽過

How to Capture Live Subprocess Output and Log it Simultaneously?

子進程命令的即時輸出

要擷取即時輸出並將其儲存以進行記錄,請採用以下方法之一:

使用迭代器

建立迭代器從子進程標準輸出讀取並同時寫入:

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)
登入後複製

使用寫入器和讀取器

將寫入器傳遞給子程序並從讀取器讀取:

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())
登入後複製

以上是如何捕捉即時子流程輸出並同時記錄它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板