我正在从 Python 运行 C 可执行文件,该可执行文件有时会出现段错误。当出现段错误时,子进程模块不会在 stdout 或 stderr 中返回任何内容。
示例代码:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
来源为a.out
is:
int main() {
printf("hello world\n");
int x = 1 / 0;
}
的输出./a.out
is:
hello world
Floating point exception
Python 代码的输出是(在 Linux 中,python 2.7):
out: ""
err: ""
-8
有没有办法即使崩溃也能获取可执行文件的输出?
将返回码转换为字符串消息的通用方法也很好。
应用程序在遇到分段错误之前几乎肯定不会刷新其输出缓冲区。
默认情况下,C stdio 库配置缓冲stdout
以便缓冲区在行的每一端都被刷新,但只是stdout
是一个 tty。这就是为什么你do运行时查看输出a.out
从命令行。
您不能直接让 C 程序从 Python 端更改此设置。但你什么can要做的就是给它一个 tty 以供其使用stdout
,即伪tty。打开和设置伪终端的细节比设置常规管道复杂得多,但有一些模块可以帮助您:请参阅Pexpect and 这个问题等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)