Python:检查cmd命令何时完成任务
当我在一个 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