zoukankan      html  css  js  c++  java
  • Python 输出命令行进度条

    在使用 pip 安装时,你会发现有下载进度条,我们也可以借助开源的第三方库来实现这个功能,在项目输出时增加一些可视化效果。

    一个简单易用的第三方库是:progress

    作者提供了动图很直观地展现了实现的所有输出。

    这个库实现了两类样式,一类是有终点的进度条样式,另一类是多用于加载的转圈样式。

    import time
    from progress.bar import Bar
    
    bar = Bar('Processing', max=100, fill='@', suffix='%(percent)d%%')
    for i in range(100):
        time.sleep(0.1)
        bar.next()
    bar.finish()
    

    参数定义的功能:

    • max: 进度条最大进度
    • fill:进度条填充的字符
    • suffix:百分比的样式

    运行上述代码会得到输出

    Processing |@@@@@@                          | 20%
    

    同时也提供上下文的用法(需要用 Github 里的源代码):

    with Bar('Processing', max=20) as bar:
        for i in range(20):
            # Do some work
            bar.next()
    

    另一类转圈样式,用法和Bar类似,只要没达到终点就一直调用next方法即可

    from progress.spinner import Spinner
    
    spinner = Spinner('Loading ')
    while state != 'FINISHED':
        # Do some work
        spinner.next()
    

    动图里的所有样式都是作者已经实现的派生类,用法基本都一样,当然也可以继承基础类来自己实现更多的功能。

    class SlowBar(Bar):
        suffix = '%(remaining_hours)d hours remaining'
        @property
        def remaining_hours(self):
            return self.eta // 3600
    

    上面介绍的库,实现的功能很简单,而且默认只能输出到终端。

    如果有更复杂的使用场景,推荐使用另一个库:python-progressbar

    这个库实现了更多功能,可以自定义组合出一个进度条样式,还可以指定输出流。

    基本的使用很简单,可以直接传入迭代对象。

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

    输出如下:

    70% (70 of 100) |################       | Elapsed Time: 0:00:01 ETA:   0:00:00
    

    也可以生成对象后调用update方法 。

    import time
    import progressbar
    
    bar = progressbar.ProgressBar(max_value=100)
    for i in range(100):
        time.sleep(0.1)
        bar.update(i)
    

    最有特点之处就是可以自定义组件,比如我们来实现类似于动图中转圈加载的样式。

    import time
    import progressbar
    
    widgets = [
        'Loading: ',
        '[', progressbar.AnimatedMarker(), ']',
        ' ',
        progressbar.Timer()
    ]
    bar = progressbar.ProgressBar(
        widgets=widgets, max_value=progressbar.UnknownLength)
    
    for i in range(100):
        time.sleep(0.5)
        bar.update(i)
    

    输出样式是这样的,方括号中的会一直旋转

    Loading: [] Elapsed Time: 0:00:13
    

    更多功能不再赘述,可以查看 Github 中的文档

    欢迎关注

    微信公众号:面向人生编程

    编程思维不应只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

  • 相关阅读:
    HAproxy 1.5 dev14 发布
    IBM/DW 使用 Java 测试网络连通性的几种方法
    Skype 4.1 Linux 发布,支持微软帐号登录
    Dorado 7.1.20 发布,Ajax的Web开发平台
    Aspose.Slides for Java 3.0 发布
    开发版本 Wine 1.5.18 发布
    BitNami Rubystack 开始支持 Ruby 2.0
    XWiki 4.3 正式版发布
    Silverlight实例教程 Out of Browser的Debug和Notifications窗口
    Silverlight实例教程 Out of Browser与Office的互操作
  • 原文地址:https://www.cnblogs.com/zkqiang/p/10515134.html
Copyright © 2011-2022 走看看