【发布时间】:2011-02-09 16:38:38
【问题描述】:
从 python 代码内部,我想运行一个从标准输入获取参数的二进制程序。使用 subprocess 模块,这应该很简单:
import subprocess
command = [ 'my_program' ]
p = subprocess.Popen( command, \
stdin = subprocess.PIPE, stdout = subprocess.PIPE, \
env={ "GFORTRAN_UNBUFFERED_ALL": "1"} )
p.stdin.write ( stdin_stuff )
while True:
o = p.stdout.readline()
if p.poll() != None:
break
# Do something with stdout
现在,这会启动程序,但 python 脚本只是挂在那里。我知道这很可能是由于 gfortran (我用来编译 my_program 正在缓冲其标准输出流。gfortran 允许使用 GFORTRAN_UNBUFFERED_ALL 环境变量,就像我所做的那样,以及在 fortran 代码中使用 FLUSH() 内在变量,但仍然没有运气:python 代码仍然挂起。
【问题讨论】:
-
您可以通过“检查”旁边的标记来接受您喜欢的答案。这样做在本网站上被认为是有礼貌的,因此您可能需要在您提出的问题上检查您最喜欢的答案。