捕获RUNTIME由子进程模块的python的POPEN函数执行的可执行文件的错误

时间:2014-02-27 18:50:58

标签: python shell runtime-error subprocess stderr

我正在编写一个编译和运行C / C ++代码的python脚本。 我想捕获运行时错误。 例如:Nzecv,分段错误,碎片错误等

我使用以下命令执行编译文件:

process = Popen( exec_path , stdin=PIPE, stdout=PIPE, stderr=PIPE, shell= False) 
(output, error) = process.communicate(testCase)

我尝试过很少有运行时错误的程序,但错误 并未反映在stderr 中。 经过一些研究,我发现stderr从程序的返回值中读取。 在C和大多数其他程序中,main返回custom(“return 0;”)值而不是错误信号。

是否有可能 捕获运行时错误信号? 我应该如何实现它?

编辑:终端可以捕获运行时错误信号吗?怎么样? 如果是,则通过python运行相应的shell脚本。

1 个答案:

答案 0 :(得分:1)

  

是否有可能捕获运行时错误信号?我该如何实施呢?

要查明子进程是否被信号杀死,您可以检查process.returncode

  

负值-N表示孩子被信号终止   N(仅限Unix)。

注意:如果您想为子流程中的信号提供自定义处理程序,可以在signal.signal()中调用preexec_fn,请参阅code example that shows how to restore default signal handler using prexec_fn