Python:检查cmd命令何时完成任务

2 投票
2 回答
746 浏览
提问于 2025-04-16 05:04

当我在一个 Python 脚本中使用 subprocess.Popen(script, shell=True) 来执行另一个 Python 脚本时,能不能在这个脚本运行完成后提醒 Python,然后再执行其他的函数呢?

另外,我能不能实时获取执行的 Python 脚本的输出呢?
我现在只能通过 command>output.txt 来获取输出,但那是等整个过程结束后才有的。stdout 似乎没有任何输出。

2 个回答

1

你想等Popen结束吗?你试过这样做吗:

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

你有没有想过用外部的Python脚本,把它当作模块导入,而不是启动一个子进程呢?

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

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

撰写回答