进程不等待 children python

process not waiting for children python

我正在处理 windows 上的外部可执行文件的项目。我正在使用 Popen 与外部可执行文件交互。

工作流程如下:commands -> .exe -> output_files -> read_outputfiles

命令正按预期传送到 .exe 文件,但是,创建的进程并未等待命令执行,因此未生成输出文件。我已经尝试 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...

在继续您的 python 程序之前,您没有等待进程终止。您应该 process.wait() 才能完成。在您与流程沟通后添加,或使用注释中的 process.communicate()(并自动调用 wait())应该具有所需的功能。

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()

这工作正常!