0

我正在尝试从我的 python 脚本中读取用 c++ 编写的可执行文件 (A) 的输出。我在 Linux 中工作。到目前为止我知道的唯一方法是通过子流程库

首先我试过

p = Popen(['executable', '-arg_flag1', arg1 ...], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print "reach here"
stdout_output = p.communicate()[0]
print stdout_output
sys.stdin.read(1)

结果挂断了我的可执行文件(cpu 使用率为 99%)和我的脚本 :S:S:S 此外到达这里打印。

之后我尝试了:

f = open ("out.txt",  'r+')
command = 'executable -arg_flag1 arg1 ... '
subprocess.call(command,  shell=True, stdout=f)
f.seek(0)
content = f.read()

这可行,但我得到一个输出,其中内容末尾的一些字符重复,或者产生的值比预期的多:S

无论如何,有人可以告诉我一个更合适的方法吗?

提前致谢

4

1 回答 1

0

第一个解决方案是最好的。使用 shell=True 速度较慢,并且存在安全问题。

问题是 Popen 不等待进程完成,因此 Python 停止在没有 stdout、stdin 和 stderr 的情况下离开进程。导致该过程变得疯狂。添加 p.wait() 应该可以解决问题!

此外,使用通信是浪费时间。只需执行 stdout_output = p.stdout.read()。您必须检查自己是否 stdout_output 包含任何内容,但这仍然比使用communicate()[0] 更好。

于 2013-09-23T19:43:50.373 回答