【发布时间】:2019-04-05 14:45:20
【问题描述】:
我正在使用 Python 3.7 和 subprocess 库。
我有一个二进制文件my_prog,它因段错误而崩溃:
$> ./my_prog
[1] 9328 segmentation fault ./my_prog
在我的脚本main.py 中,我有这些代码行:
try:
output = subprocess.check_output(['./my_prog'], shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exc:
print(exc.returncode)
print(exc.output)
在这种情况下,我得到了
$> python3 main.py
-11
b''
好的,子进程捕获到信号 SIGSEGV。
好的,没有输出。为什么不呢。
但是,如果我想在标准输入上读取相同的程序,我必须修改我在main.py 中的行(文件“text.txt”存在):
output = subprocess.check_output(['./my_prog < text.txt'], shell=True, stderr=subprocess.STDOUT)
在这种情况下,我得到:
$> python3 main.py
139
b'/bin/sh: line 1: 17235 Segmentation fault: 11 ./my_prog < text.txt\n'
我知道它是 11 + 128,这也意味着 SIGSEGV。
而且,现在,我有一个输出!
即使 139 和 -11 的含义相同,为什么返回码会在这两种不同的情况下发生变化?还有为什么第一种情况没有输出?
谢谢:)
编辑:
在输出问题上添加差异。
【问题讨论】:
标签: python subprocess signals return-code