【问题标题】:process not waiting for children python进程不等待孩子python
【发布时间】:2015-09-08 21:01:28
【问题描述】:

我正在处理一个在 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 popen


    【解决方案1】:

    在继续执行 Python 程序之前,您无需等待进程终止。你应该process.wait() 让它完成。在与进程通信后添加,或使用 cmets 中的process.communicate()(并自动调用wait())应该具有所需的功能。

    【讨论】:

    • 感谢解决!我还必须将标准输出更改为无。
    【解决方案2】:
    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()
    

    这没问题!

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2014-11-08
      相关资源
      最近更新 更多