检测进程中止

时间:2012-06-27 13:18:50

标签: python subprocess popen

我正在使用subprocess.Popen从python运行一些c ++二进制应用程序。如何处理此流程的中止?例如,我的c ++断言与断言,我在控制台中看到:

binary: /usr/include/.../file.hpp:42: Assertion `min <= max' failed.
Aborted

进程关闭但是如何使用popen句柄在python中捕获它?

2 个答案:

答案 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

所以我也有同样的效果。