Python 未显示调试器输出

Python 未显示调试器输出,python,ipython,pytest,Python,Ipython,Pytest,在包含的测试中运行ipdb时遇到问题。测试代码的简化版本如下所示: import pytest import sys def test_foo(capfd): def foo(): print("Hello World!") foo() out, err = capfd.readouterr() import ipdb ipdb.set_trace() assert out == "Hello World!\n" 当我运行py.

在包含的测试中运行
ipdb
时遇到问题。测试代码的简化版本如下所示:

import pytest
import sys

def test_foo(capfd):
    def foo():
        print("Hello World!")
    foo()
    out, err = capfd.readouterr()
    import ipdb
    ipdb.set_trace()
    assert out == "Hello World!\n"
当我运行
py.test-s test/test\u capfb.py
时,调试器的所有输出都被捕获,我什么也看不到。我仍然可以向调试器发出命令(例如下面输出中的
c
),但在整个进程完成运行之前,不会得到任何输出。输出示例如下所示:

; py.test -s tests/test_capfb.py
============================= test session starts ==============================
platform linux2 -- Python 2.7.5, pytest-2.8.7, py-1.4.31, pluggy-0.3.1
rootdir: /home/usr/repos/junk, inifile: setup.cfg
plugins: bdd-2.16.0, colordots-0.1, cov-2.2.1, html-1.7, pep8-1.0.6, xdist-1.14, catchlog-1.2.2
collected 1 items
tests/test_capfb.py 
c  <---- I typed this!
--Return--
None
> /home/usr/repos/junk/tests/test_capfb.py(12)test_foo()
     11     import ipdb
---> 12     ipdb.set_trace()
     13
ipdb> .
========================== 1 passed in 228.90 seconds ==========================
;py.test-s测试/测试_capfb.py
===========================================测试会话开始==============================
平台linux2——Python 2.7.5、pytest-2.8.7、py-1.4.31、Plugy-0.3.1
rootdir:/home/usr/repos/junk,ini文件:setup.cfg
插件:bdd-2.16.0、colordots-0.1、cov-2.2.1、html-1.7、pep8-1.0.6、xdist-1.14、catchlog-1.2.2
收集1项
测试/测试_capfb.py
c/home/usr/repos/junk/tests/test_capfb.py(12)test_foo()
11导入ipdb
--->12 ipdb.set_trace()
13
ipdb>。
====================================================1在228.90秒内通过==========================

当涉及到
ipdb
时,有没有办法告诉
pytest
停止捕获stdout/stderr

作为一种解决方法,我可以使用以下方法捕获输出:

import pytest
import sys
import iocapture

def test_foo():
    def foo():
        print("Hello World!")
    out = None
    with iocapture.capture() as captured:
        foo()
        out = captured.stdout
    import ipdb
    ipdb.set_trace()
    assert out == "Hello World!\n"

现在,如果可能的话,用nosetests运行您的测试-ipdb检测到nose已加载并停止捕获stdout。在下一个版本(0.9.1)中,似乎会有一种更通用的方法来实现这一点:@ThomasK:Your work-around不起作用,因为
nose
对此一无所知。谢谢你的链接。