当我在另一个 python脚本中使用subprocess.Popen(script, shell=True)
执行python脚本时,是否可以在脚本完成运行之前警告python,然后再执行其他功能?
另外,我可以获得执行的python脚本的实时输出吗?
我只能从command>output.txt
得到它的输出,但这只是在整个过程结束之后。 stdout
不会影响任何输出。
答案 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 ...