2015-09-08 140 views
2

我正在处理一个项目,我在Windows上处理外部可执行文件。我正在使用Popen与外部可执行文件进行交互。进程不等待孩子python

工作流程是如下:命令 - > .EXE - > output_files - > read_outputfiles

的命令被馈送到.EXE文件作为然而exepected,所创建的进程不等待对命令执行并因此不会生成输出文件。我已经尝试过time.sleep(1)但没有用。我注意到输出文件只有在python代码终止时才被写入。

for i in range(0, len(commands)): 
    process.stdin.write(commands[i]) 
    #out, err=process.communicate() 
    #print err 

#process.terminate() 
#Reading AVL output files 

# Open AVLaero.dat 

fid  = open('AVLaero.dat', 'r') 
AVLaero=fid.read() 
fid.close() 
process.terminate() 

当找不到AVLaero.dat时引发异常后,程序终止后将写入文件。

为了测试这是否是由avl.exe文件引起的,我添加了一个无限while循环来保持我的Python代码在运行时给avl.exe写入时间。但是,这并没有导致输出文件被写入。

我使用的Parallels Desktop的虚拟机上运行Windows ...

回答

2

你是不是在等待的过程中继续你的Python程序之前终止。你应该process.wait()完成。此外,在与流程沟通后,或者在注释中(并自动调用wait())使用process.communicate()应该具有所需的功能。

+0

感谢您的解决!我也必须将stdout更改为None。 – pds

0
avl_path=os.getcwd()+'/avl.exe' 
process=Popen(avl_path, stdin=PIPE, stdout=None, stderr=None) 
for i in range(0, len(commands)): 
    process.stdin.write(commands[i]) 
    #process.stdout.readinto(test) 
    #out, err=process.communicate() 
    #print err 

#process.terminate() 
#Reading AVL output files 

# Open AVLaero.dat 
#print test 
process.wait() 
fid  = open('AVLaero.dat', 'r') 
AVLaero=fid.read() 
fid.close() 
process.terminate() 

这工作正常!