【发布时间】:2011-06-11 01:57:10
【问题描述】:
我正在使用 py.test 来测试我的一些模块,其中包含相当多的 stdlib 日志记录。我当然希望日志记录到 py.test 捕获的 stdout,这样如果测试失败,我将获得所有相关的日志记录消息。
问题在于日志模块最终会尝试将消息记录到 py.test 提供的“stdout”对象中在该对象已被 py.test 丢弃之后。也就是说,我得到:
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 集成的正确方法?
(我尝试查看this,看起来它应该可以正常工作,所以对我没有多大帮助)
【问题讨论】:
-
你能告诉我们你是如何运行你的 py.test 代码的吗?如果发生这种情况,则必须在 py.test 之前配置和初始化日志记录,但如果您通过 py.test 可执行文件运行代码,则不会发生这种情况。
-
我使用基本命令行
py.test运行它,让它随心所欲地收集和运行。
标签: python unit-testing logging pytest