【问题标题】:Python: Check when a cmd command completes its jobPython:检查 cmd 命令何时完成其工作
【发布时间】:2010-10-06 09:39:50
【问题描述】:

当我在another python 脚本中使用subprocess.Popen(script, shell=True) 执行python 脚本时,是否可以在脚本完成运行后再执行其他函数时提醒python?

顺便说一句,我可以得到执行的 python 脚本的实时输出吗?
我只能通过command>output.txt 获得输出,但这只是在整个过程结束之后。 stdout 没有 grep 任何输出。

【问题讨论】:

  • 您想要通知产生子进程的原始进程吗?或者是否有一个单独的进程来监控脚本执行?换句话说:您只是在寻找一个简单的“等到脚本执行”,还是希望与子进程并行运行 Python 脚本?

标签: python real-time


【解决方案1】:

当你使用 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

【讨论】:

    【解决方案2】:

    您想等待 Popen 结束吗?你有没有试过这样:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2012-10-16
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多