我正在編寫一個研究工具,最近我從使用「打印」語句切換到使用Python內置的記錄器功能。我推斷,這樣可以讓用戶選擇將輸出轉儲到文件,並將其轉儲到屏幕上。從外部應用程序記錄
到目前爲止這麼好。我在Python中的部分代碼使用「logger.info」和「logger.error」轉儲到屏幕和文件。 「記錄器」是模塊範圍的記錄器。這部分工作就像一個魅力。
但是,在幾個地方,我使用「subprocess.call」通過shell運行可執行文件。所以在整個代碼,我有這樣
proc = subprocess.call(command)
行此命令的輸出將打印到屏幕上,一如既往,但它不會轉儲到用戶指定的文件。
一個可能的辦法是打開一個管道文件:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
但這隻會轉儲到文件,而不是到屏幕上。
基本上,我的問題歸結爲:有沒有一種方法可以利用我現有的記錄器,而無需爲專門用於subprocess.call的文件構造另一個處理程序? (也許通過將輸出重定向到記錄器?)或者,根據當前的設置,這是不可能的?如果是後者,我該如何改進設置?
(哦也,這將是巨大的,如果日誌記錄是在「實時」,這樣從可執行的消息,因爲他們收到的記錄。)
感謝您的幫助! :)
Lennart Regebro的[StreamLogger類](http://stackoverflow.com/a/4838875/190597)將在您的情況下很好地工作。 – unutbu
感謝您的參考!這對我的情況非常有用。 –