2017-02-16 12 views
0

私は単体テストをたくさん持っています。そのうちの1つは、ロギング出力を変数に取り込むことです(テストを実行している人には見えないはずです)。そのことについて考え始める前に、私は単純なテストケースを稼働させようとしていました。しかしこれはありません。出力:標準出力経由のロギング出力を一時的にキャプチャする

WARNING:__main__:bla bla bla 
(empty line from print) 

私は間違っていますか?

答えて

1

sys.stderrはオブジェクトへのポインタです。最初にlogging.basicConfig(stream=sys.stderr)を呼び出すと、ロガーのストリームが有効なストリームに設定されます。

後でsys.stderrに変更すると、sys.stderrが指し示すものだけが変更され、ロガー内のストリームは変更されません。

私は次のことをお勧め:

@staticmethod 
def pr(): 
    logger.setLevel("WARN") 

    mystderr = StringIO() 
    logging.basicConfig(stream=mystderr) 
    logger.warn('bla bla bla') 
    print 'my [ {} ]'.format(mystderr.getvalue()) 
    logging.basicConfig(stream=sys.stderr) 
+0

は、私はそれを実現していないと信じてすることはできません。そして、その上に、出力音が同じに見えるので、私はそれを正しく行ったことが分かっていないでしょう。ありがとう! – Nimitz14

関連する問題