开发者

Python: Check when a cmd command completes its job

开发者 https://www.devze.com 2023-01-19 02:18 出处:网络
When I execute a python script using subprocess.Popen(script, shell=True) in another python script, is it possible to alert python when the script completes running before executing other functions?

When I execute a python script using subprocess.Popen(script, shell=True) in another python script, is it possible to alert python when the script completes running before executing other functions?

On a side note, can I get real-time output of the executed python script?

I can only get output from it doing command>output.txt but that's only after the whole process ends. 开发者_C百科stdout does not grep any ouput.


When you create a subprocess with Popen, it returns a subprocess.Popen object that has several methods for accessing subprocess status and data:

  • You can use poll() to determine whether a subprocess has finished. None indicates that the process has ended.
  • Output from a script while its running can be retrieved with communicate().

You can combine these two to create a script that monitors output from a subprocess and waits until its ready as follows:

import subprocess

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

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


You want to wait for the Popen to end? have you tried simply this:

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

Have you considered using the external python script importing it as a module instead of spawning a subprocess?

As for the real-time output: try python -u ...

0

精彩评论

暂无评论...
验证码 换一张
取 消