【问题标题】:Python subprocess Popen returns with non zero error code but no errorPython子进程Popen返回非零错误代码但没有错误
【发布时间】:2016-12-11 11:12:45
【问题描述】:

我正在尝试执行产生错误的可执行二进制文件。我使用 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);
}

【问题讨论】:

    标签: python subprocess popen


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果您在 UNIX//Linux/OS X 上运行,您应该获得核心转储(shell 中的ulimit -c unlimited)。内核不会写入进程的标准错误 - 因为进程已经崩溃,所以不能。

      这不是 Python 的问题。

      【讨论】:

        猜你喜欢
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 2015-08-21
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        相关资源
        最近更新 更多