我正在尝试执行产生错误的可执行二进制文件。我使用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);
}
答案 0 :(得分:0)
输出由shell生成,同时捕获SIGFPE
信号。您必须自己在程序中捕获此信号并按照您的意愿处理它。
答案 1 :(得分:0)
这不仅仅是普通的运行时错误,而是由内核(通过信号)引发的进程崩溃。
如果您在UNIX // Linux / OS X上运行,您应该在shell中获得核心转储(ulimit -c unlimited
)。内核不会写入进程的stderr - 它不会因为进程崩溃而无法写入。
这不是Python的问题。