首頁 > 後端開發 > Python教學 > 如何將 Python 應用程式輸出(包括系統呼叫)複製到控制台和日誌檔案?

如何將 Python 應用程式輸出(包括系統呼叫)複製到控制台和日誌檔案?

Susan Sarandon
發布: 2024-11-29 08:24:14
原創
240 人瀏覽過

How Can I Duplicate Python Application Output (Including System Calls) to Both the Console and a Log File?

將輸出重新導向並複製到日誌檔案

您渴望實現命令列「tee」實用程式的功能,其中所有輸出由Python應用程式產生的資料(包括系統呼叫輸出)會複製到日誌中file.

重新導向

您最初的方法是將sys.stdout 和sys. stderr 的文件描述符複製到日誌文件,這成功地將輸出重新導向到日誌守護程式模式。但是,此方法在互動模式下存在不足,因為它阻礙了螢幕上輸出的並發顯示。

複製

要實現複製,只需反轉 dup2 呼叫即可不夠。相反,您可以採用一種技術來攔截 sys.stdout 並將寫入的資料複製到螢幕和日誌檔案。

解決方案

下面的程式碼片段提供了一個優雅的解決方案:

class Tee(object):
    def __init__(self, name, mode):
        self.file = open(name, mode)
        self.stdout = sys.stdout
        sys.stdout = self
    def __del__(self):
        sys.stdout = self.stdout
        self.file.close()
    def write(self, data):
        self.file.write(data)
        self.stdout.write(data)
    def flush(self):
        self.file.flush()
登入後複製

此類封裝了檔案描述符重複,並提供了一種無縫的方式來寫入兩者sys.stdout 和日誌檔案。您可以初始化 Tee 的實例並將日誌檔案詳細資訊作為參數傳遞。然後該實例就成為新的sys.stdout。

結論

透過使用此方法,可以同時實現重定向(守護進程模式)和複製(交互模式) )將所有應用程式輸出(包括系統調用輸出)保存到日誌檔案中。

以上是如何將 Python 應用程式輸出(包括系統呼叫)複製到控制台和日誌檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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