如何停止来自的断言错误消息subprocess.check_调用()单位

2024-09-30 01:31:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个测试调用脚本使用subprocess.check_调用. 我要检查脚本中的论点和论点的有效性。所以我做了这个:

try:
    self.assertRaises(subprocess.CalledProcessError, subprocess.check_call, ['myscript.py', 'myBadArgument'])
except AssertionError:
    pass

测试实际上通过了,因为正确的断言被提出,但是我希望保持断言消息和相关的堆栈转储不会被打印到屏幕上。在

我该怎么做? 谢谢!在


Tags: pyself脚本check断言callsubprocess有效性
2条回答

要抑制子进程的错误消息,请重定向其stderr:

from subprocess import DEVNULL

with self.assertRaises(subprocess.CalledProcessError):
    subprocess.run(['myscript.py', 'myBadArgument'], stdout=DEVNULL, stderr=DEVNULL)

另外,不要捕捉AssertionError。这不会抑制子进程的错误消息;它只会导致测试错误地通过,即使子进程没有引发错误。在

这里的问题是我过度使用了assert()语句。我使用assert检查用户是否给了我存在的文件,或者脚本中有意义的值。在

这是我的误会。现在我看到正确的方法是检查数据并在库元素中引发适当的异常,然后在面向用户的脚本中捕捉这些异常并提供一个无调用堆栈的消息。在

一旦我清理了这个问题,我的测试通过了正确的异常,没有不必要的消息。在

相关问题 更多 >

    热门问题