运行可执行文件,等待它生成输出,运行另一个程序

时间:2014-12-18 13:49:03

标签: python subprocess executable popen

在Python脚本中,我正在尝试执行以下事件序列:

  1. 打开命令窗口并运行程序。完成后,它会输出一个文本文件。
  2. 创建该文本文件后,关闭该程序。
  3. 发生这种情况后,使用文本文件作为输入运行新程序
  4. 这是我到目前为止所拥有的:

    subprocess.popen(['cmd','/c',r'programThatRuns.exe'])
    subprocess.wait()  # ? subprocess.check_call()? kill?
    subprocess.popen(['cmd','/c',r'otherProgramThatRuns.exe'])
    

    所以我猜我真的被困在第二行

3 个答案:

答案 0 :(得分:3)

我认为你所需要的只是:

subprocess.check_call(['programThatRuns.exe'])
subprocess.check_call(['otherProgramThatRuns.exe'])

check_call函数将运行程序并等待它完成。如果失败(非0退出代码),则会抛出CalledProcessError异常。

您通常不希望通过cmd运行程序,只需直接运行它们即可。如果程序不是可执行文件,您只需要强制使用cmd,例如对于dir之类的内置命令,.bat.cmd文件,或者如果要使用文件关联。

答案 1 :(得分:1)

您是否尝试过使用subprocess.call

Python 2 - Python 3

  

运行args描述的命令。等待命令完成,然后返回returncode属性。

似乎是你正在尝试做的事情。只需运行第一个进程,检查文件是否存在,然后将文件传递给第二个进程即可使用。

subprocess.check_call也适用于您尝试执行的操作,但如果该流程返回非零返回代码,则会引发异常,call只会返回返回码。

答案 2 :(得分:0)

你必须在子进程上应用'wait',即

o = subprocess.popen(['cmd','/c',r'programThatRuns.exe'])
o.wait()  
subprocess.popen(['cmd','/c',r'otherProgramThatRuns.exe'])

或您使用check_call