我正在使用 py.test 来测试我的一些模块,其中包含相当多的 stdlib 日志记录。我当然希望日志记录到 py.test 捕获的 stdout,这样如果测试失败,我将获得所有相关的日志记录消息。
这样做的问题是,在 py.test 丢弃该对象后,日志记录模块最终尝试将消息记录到 py.test 提供的“stdout”对象。也就是说,我得到:
Traceback (most recent call last):
File "/usr/lib/python2.6/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/usr/lib/python2.6/logging/__init__.py", line 1508, in shutdown
h.flush()
File "/usr/lib/python2.6/logging/__init__.py", line 754, in flush
self.stream.flush()
ValueError: I/O operation on closed file
如果我用 关闭捕获-s
,我没有任何问题,但当然这会使测试输出无法读取无关的日志记录。
谁能告诉我将 stdlib 日志记录与 py.test 集成的正确方法?
(我试着看看这个,它看起来应该可以正常工作,所以它对我没有多大帮助)