从python代码中,我想运行一个二进制程序,从stdin中获取它的参数。使用子进程模块,这应该是直接的:subprocess.Popen和缓冲过程输出
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代码仍然挂起
您可以通过“检查”旁边的标记来接受您喜欢的答案。在这个网站上这被认为是礼貌的,所以你可能想要检查你所问的问题最满意的答案。 – 2011-02-09 23:31:38