2016-12-15 3 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_methodwriteとし、logger.test_methodではなくsys.stderrloggerに割り当てる必要があります。 flush()を実装して、何もしないこともできます。

class TestClass(): 

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

    def flush(): 
     pass 

logger = TestClass() 
sys.stderr = logger 

また、(例えば、通常のファイルにstderrを復元する)必要なクリーンアップがある場合は特に、コンテキストマネージャのようにクラスの仕事をするために__enter____exit__メソッドを実装することができます。

+0

'#acquire threading lock'のコメントを' print(msg) 'に置き換えてみましたが、コードは決して終了しません。私はリストに 'msg'を追加しようとしましたが、同じ結果が出ます。 – user144153

関連する問題