我编写了一个简单的控制台应用程序,使用ftplib从FTP服务器上传和下载文件。

我想应用程序显示一些可视化的下载/上传进度为用户;每次下载数据块时,我希望它提供一个进度更新,即使它只是一个数字表示,如百分比。

重要的是,我想避免擦除之前打印到控制台的所有文本(即,我不想在打印更新的进度时“清除”整个终端)。

这似乎是一个相当常见的任务——我如何才能制作一个进度条或类似的可视化输出到我的控制台,同时保留之前的程序输出?


当前回答

尝试安装这个包:pip install progressbar2:

import time
import progressbar

for i in progressbar.progressbar(range(100)):
    time.sleep(0.02)

进度栏 GitHub: https://github.com/WoLpH/python-progressbar

其他回答

我正在使用来自reddit的进度。我喜欢它,因为它可以在一行中打印每一项的进度,而且它不应该从程序中删除打印输出。

编辑:固定链接

https://pypi.python.org/pypi/progressbar2/3.30.2

Progressbar2是一个很好的基于ascii的命令行progressbar库 导入的时间 进口progressbar

bar = progressbar.ProgressBar()
for i in bar(range(100)):
    time.sleep(0.02)
bar.finish()

https://pypi.python.org/pypi/tqdm

TQDM是progressbar2的替代方案,我认为它用于pip3,但我不确定

from tqdm import tqdm
for i in tqdm(range(10000)):
...
import time,sys

for i in range(100+1):
    time.sleep(0.1)
    sys.stdout.write(('='*i)+(''*(100-i))+("\r [ %d"%i+"% ] "))
    sys.stdout.flush()

输出

[29 percent] ===================

一个非常简单的解决方案是将以下代码放入循环中:

把这个放在你的文件的主体(即顶部):

import sys

把这个放在你的循环体中:

sys.stdout.write("-") # prints a dash for each iteration of loop
sys.stdout.flush() # ensures bar is displayed incrementally

写入一个\r到控制台。这是一个“回车”,它使它之后的所有文本都在行首回显。喜欢的东西:

def update_progress(progress):
    print '\r[{0}] {1}%'.format('#'*(progress/10), progress)

这将给你一些像:[##########]100%