要实现如下所示的状态栏:
[========== ] 45%
[================ ] 60%
[==========================] 100%
我希望将其打印到stdout,并不断刷新它,而不是打印到另一行。该怎么做呢?
发布于 2010-06-09 07:33:18
您可以从PyPI获得一个名为progressbar
的Python模块,它实现了这些功能。如果您不介意添加依赖项,这是一个很好的解决方案。否则,请选择其他答案之一。
下面是如何使用它的一个简单示例:
import progressbar
from time import sleep
bar = progressbar.ProgressBar(maxval=20, \
widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
bar.start()
for i in xrange(20):
bar.update(i+1)
sleep(0.1)
bar.finish()
要安装它,您可以使用easy_install progressbar
,如果您喜欢pip,也可以使用pip install progressbar
。
发布于 2010-06-09 07:32:03
'\r'
字符(回车符)将光标重置到行首,并允许您覆盖该行上以前的内容。
from time import sleep
import sys
for i in range(21):
sys.stdout.write('\r')
# the exact output you're looking for:
sys.stdout.write("[%-20s] %d%%" % ('='*i, 5*i))
sys.stdout.flush()
sleep(0.25)
我不能百分之百确定这是否可以在所有系统上完全移植,但它至少可以在Linux和OSX上工作。
发布于 2015-04-17 23:14:28
我发现了有用的库https://github.com/noamraph/tqdm (https://github.com/tqdm/tqdm/,以前是tqdm )。它可以自动估计完成时间,并可用作迭代器。
用法:
import tqdm
import time
for i in tqdm.tqdm(range(1000)):
time.sleep(0.01)
# or other long operations
结果如下:
|####------| 450/1000 45% [elapsed: 00:04 left: 00:05, 99.15 iters/sec]
tqdm
可以包装任何可迭代的对象。
https://stackoverflow.com/questions/3002085
复制相似问题