You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest中print仅在quit()前可输出的原因及正确打印stdout的方法

现象原因

pytest默认开启了标准输出/标准错误的捕获机制,测试运行过程中所有print输出的内容会被暂时缓存,不会直接输出到控制台。只有当测试用例执行失败时,pytest才会把对应用例捕获到的输出内容打印出来,方便定位问题。
你在测试代码中添加quit()后会触发未捕获的SystemExit异常,pytest会判定该测试用例执行失败,因此自动把之前缓存的print内容输出到控制台,同时抛出异常提示。

正常打印的实现方法

你可以通过以下几种方式实现正常打印stdout内容:

  • 运行测试时添加-s参数,直接关闭pytest的全局输出捕获机制,所有内容会实时输出到控制台:
    pytest 你的测试文件名.py -s
    
  • 如果你希望只查看测试通过的用例的输出,不想关闭全局捕获,可以加-rP参数,测试跑完后会统一打印所有执行成功的用例的输出:
    pytest 你的测试文件名.py -rP
    
  • 如果要做全局配置,不需要每次运行都加参数,可以在项目根目录的pytest.ini配置文件中添加如下内容:

    [pytest]
    addopts = -s

  • 如果你只需要特定位置的内容强制输出,不想修改全局配置,可以借助pytest的capsys fixture手动操作输出:
    class TestModule:
        def test_print(self, capsys):
            print("test")
            # 手动读取捕获的内容并打印
            captured = capsys.readouterr()
            print(captured.out, end="")
    

内容的提问来源于stack exchange,提问作者Yes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:18:05