Python:检查cmd命令何时完成其作业

时间:2010-10-06 09:39:50

标签: python real-time

当我在另一个 python脚本中使用subprocess.Popen(script, shell=True)执行python脚本时,是否可以在脚本完成运行之前警告python,然后再执行其他功能?

另外,我可以获得执行的python脚本的实时输出吗? 我只能从command>output.txt得到它的输出,但这只是在整个过程结束之后。 stdout不会影响任何输出。

2 个答案:

答案 0 :(得分:3)

当您使用Popen创建子流程时,它会返回一个subprocess.Popen对象,该对象具有多种访问子流程状态和数据的方法:

  • 您可以使用poll()来确定子进程是否已完成。 None表示该流程已结束。
  • 可以使用communicate()检索脚本运行时的输出。

您可以将这两者结合起来创建一个监视子进程输出的脚本,并等待它准备好,如下所示:

import subprocess

p = subprocess.Popen((["python", "script.py"]), stdout=subprocess.PIPE)

while p.poll() is None:
    (stdout, stderr) = p.communicate()
    print stdout

答案 1 :(得分:1)

你想等待Popen结束?你试过这个:

popen = subprocess.Popen(script, shell=True)
popen.wait()

您是否考虑过使用外部python脚本将其导入模块而不是生成子流程?

至于实时输出:尝试python -u ...