Python子进程Popen返回非零错误代码但没有错误

时间:2016-08-05 06:20:36

标签: python subprocess popen

我正在尝试执行产生错误的可执行二进制文件。我使用Popen执行二进制代码:

p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
output, error = p.communicate()
return_code = p.returncode
if error:
   raise SomeLocallyDefinedError

当脚本执行导致错误时,这会引发错误。在这种特殊情况下,cmd是相关可执行二进制文件的路径。

现在当我在我的终端./binary_file上执行这个二进制文件时,它给了我一个错误信息

"浮点异常:8"。

但是当Popen执行脚本时,没有错误和输出。但是返回码是-8。我认为非零返回码意味着错误,如果是,为什么Popen.communicate()没有捕获消息?

如果你们想知道什么是可执行二进制文件。二进制文件是通过编译导致运行时错误的c文件生成的。这是c文件的内容

# include<stdio.h>
int main(){
   int a = 18;
   int b = 0;
   int c = a/b;
   printf("%d", c);
}

2 个答案:

答案 0 :(得分:0)

输出由shell生成,同时捕获SIGFPE信号。您必须自己在程序中捕获此信号并按照您的意愿处理它。

答案 1 :(得分:0)

这不仅仅是普通的运行时错误,而是由内核(通过信号)引发的进程崩溃。

如果您在UNIX // Linux / OS X上运行,您应该在shell中获得核心转储(ulimit -c unlimited)。内核不会写入进程的stderr - 它不会因为进程崩溃而无法写入。

这不是Python的问题。