我正在使用subprocess.Popen
从python运行一些c ++二进制应用程序。如何处理此流程的中止?例如,我的c ++断言与断言,我在控制台中看到:
binary: /usr/include/.../file.hpp:42: Assertion `min <= max' failed.
Aborted
进程关闭但是如何使用popen句柄在python中捕获它?
答案 0 :(得分:1)
您可以捕获SIGABRT
信号。但是,请记住,在没有进一步崩溃的情况下完成信号处理程序后可能无法继续。
我建议您尝试修复导致断言失败的任何内容。
答案 1 :(得分:1)
如果您调用了handle = subprocess.Popen(...)
,则必须在某个时刻调用handle.wait()
. Its return value,它同时是进程句柄对象的returncode
属性,显示是否该过程已正常完成(值> = 0)或者由于信号而死亡(值<0)。
示例:
>>> import subprocess
>>> subprocess.call("kill -ABRT $$", shell=True)
-6
>>> a = subprocess.Popen("kill -ABRT $$", shell=True)
>>> a.wait()
-6
>>> subprocess.call("kill -SEGV $$", shell=True)
-11
C程序看起来像
#include <assert.h>
int main() {
assert(0);
}
我能做到
>>> import subprocess
>>> subprocess.call(["./ass"])
ass: ass.c:4: main: Assertion `0' failed.
-6
所以我也有同样的效果。