是否可以完全安静地运行 pytest?

ava*_*sin 5 python pytest

我有简单的测试:

def test_noindex(data):
    assert 0
Run Code Online (Sandbox Code Playgroud)

我需要通过 py.test 处理这个测试,但完全无声(正如我看到 py.test 对于失败的测试有退出代码 1)。

我试过:

py.test -s test.py
py.test -qq test.py
py.test --capture=no test.py
Run Code Online (Sandbox Code Playgroud)

结果总是一样的:我看到完整的报告。我做错了什么?

pytest.main([params])PS 在windows上运行,在python代码中使用执行pytest

rr-*_*rr- 3

@smassey 的答案在大多数情况下都有效,但由于您从 Python 本身执行 pytest,因此您需要以不同的方式处理问题。

例如,在运行测试时,使用 pythonstdout并重定向到任何内容。stderr这可以通过以下代码来完成:

#!/usr/bin/python
import os
import sys

old_out = sys.stdout
old_err = sys.stderr
sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

print 'suppressed'

sys.stdout = old_out
sys.stderr = old_err

print 'restored'
Run Code Online (Sandbox Code Playgroud)

open(os.devnull)打开操作系统相当于/dev/null进行写入。让它简单地重定向到None是行不通的,因为sys.stdout需要sys.stderr公开某些方法,这样就print不会抛出异常。

还有一个问题:你为什么要这样做?