2016-12-15 45 views
0

在Python中,是否有可能將sys.stderr重定向到類實例的方法?在嘗試過並且未能將標準日誌記錄模塊與多處理模塊結合使用後,我開始編寫自己的自定義日誌記錄器。雖然這可能是一個糟糕的選擇,但我只需要基本的日誌記錄功能,無盡的序列化錯誤讓我發瘋。總之我想做類似的,將sys.stderr重定向到類實例的方法?

import sys 
class TestClass(): 

    def test_method(msg): 
     acquire threading lock and write to file 

logger = TestClass() 
sys.stderr = logger.test_method 

可以這樣做嗎?

回答

1

任何類似文件的對象都可以用作stderr - 它甚至不需要從file派生,主要只需要一個write()方法。基本上,您只需將您的test_method命名爲write並將sys.stderr命名爲logger而不是logger.test_method。你可能也想實施flush(),可能什麼都不做。

class TestClass(): 

    def write(msg): 
     # acquire threading lock and write to file 

    def flush(): 
     pass 

logger = TestClass() 
sys.stderr = logger 

你也可以實現__enter____exit__方法,使您的課堂作業的上下文管理,尤其是如果有需要(例如恢復stderr通常的文件)的清理。

+0

我試着通過用'print(msg)'替換'#acquire threading lock'註釋來運行這段代碼,但代碼永遠不會終止 - 它只是繼續運行。我也嘗試將'msg'附加到列表中,並且發生相同的結果。 – user144153

相關問題