gpt4 book ai didi

python - 从子流程获取进度消息

转载 作者:IT老高 更新时间:2023-10-28 20:41:09 24 4
gpt4 key购买 nike

我想启动一个需要几分钟才能完成的程序。在此期间,我想阅读程序的进度消息(打印在标准输出上)。问题是我找不到在运行期间读出其输出的方法。

我发现读取程序输出的唯一函数是Popen.communicate(),但是这个方法一直等到进程完成。所以不可能获得进度并以特殊格式的方式让用户看到。

是否有可能以另一种方式做到这一点?

当我使用脚本运行 subprocess.popen 进程时,我会在屏幕上看到程序的输出。是否可以隐藏它? (Ubuntu 10.10,普通终端)

最佳答案

最简单的方法是使用关键字参数stdout=subprocess.PIPE调用Popen。

p = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
while True:
line = p.stdout.readline()
if not line:
break
print line

要查看实际情况,这里有两个示例脚本。将它们放在同一目录中并运行 python superprint.py

printandwait.py:

import time
import sys
print 10
sys.stdout.flush()
time.sleep(10)
print 20
sys.stdout.flush()

superprint.py:

import subprocess
import sys
p = subprocess.Popen(["python printandwait.py"], shell=True, stdout=subprocess.PIPE)
while True:
print "Looping"
line = p.stdout.readline()
if not line:
break
print line.strip()
sys.stdout.flush()

关于python - 从子流程获取进度消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com