使用python子进程处理断言对话框

2024-04-23 12:10:05 发布

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

我正在使用python创建一个子进程来检查是否没有出现断言。在

我想捕获错误输出和返回代码。这很好,但我遇到的问题是,当它运行到断言时,它会给我一个对话框,它就挂在那里。在检索任何信息之前,我必须单击断言框。有没有办法让它不弹出并继续程序或发送消息关闭窗口?在

这是一个问题,因为这是一个自动化服务。在

import subprocess

pipe = subprocess.Popen('test2.exe', shell=True, stderr=subprocess.PIPE)

for line in pipe.stderr:
    print line

可执行文件是从c++代码编译的,并且有一个断言在测试时会失败。在


Tags: 代码import程序信息消息进程错误stderr
2条回答

一般来说,并不是一个简单的解决方案,因为理论上一个程序可以创建任意数量的等待用户输入的窗口。如果您有低级进程的源代码,最简单的方法就是修改它以调用^{}来禁用消息框。在

如果你没有源代码,那会非常非常困难。您可能会编写一个大的hack,它会将调试器附加到低级进程,并在调用abort()时设置断点。如果该断点被命中,则终止进程并返回适当的错误状态。但这是一个极端的非琐碎的废话。在

正如我在评论中提到的,断言弹出窗口在Python中不是一件正常的事情。如果您可以修改子流程中运行的代码,那么您就可以捕获断言并自己处理它,而不是让环境通过弹出窗口来处理它。在

import sys

try:
    code that raises the assertion
catch AssertionError, e:
    sys.stderr.write("Assertion failed: " + str(e))
    sys.exit(1)

如果它特别寻找断言,这应该可以工作,因为它将捕获断言,打印错误消息,然后引发一个简单的SystemExit异常。在

相关问题 更多 >