进程不等待 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()
这工作正常!
我正在处理 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()
这工作正常!