zoukankan      html  css  js  c++  java
  • 一个简单、易用的Python命令行(terminal)进度条库

    eprogress 是一个简单、易用的基于Python3的命令行(terminal)进度条库,可以自由选择使用单行显示、多行显示进度条或转圈加载方式,也可以混合使用。

    示例

    • 单行进度条

    • 多行进度条

    • 圆形加载

    • 混合显示

    特性

    • 使用简单,实例化一个Progress对象,调用update方法即可刷新进度
    • 不依赖任何第三方库。
    • 可定制进度符号,title,显示宽度,个性化显示。
    • 多行、单行显示进度、圆形转圈加载随意搭配。
    • 多线程安全,可在多个线程中更新进度条。

    使用方法

    1. 导入eprogress

      from eprogress import LineProgress, CircleProgress, MultiProgressManager
      
    2. 实例化进度条对象,更新进度

      # circle loading
         circle_progress = CircleProgress(title='circle loading')
         for i in range(1, 101):
         		circle_progress.update(i)
         		time.sleep(0.1)
      
      # line progress
              line_progress = LineProgress(title='line progress')
              for i in range(1, 101):
                  line_progress.update(i)
                  time.sleep(0.05)
      # multi line or circle loading progress
      progress_manager = MultiProgressManager()
      progress_manager.put(str(1001), LineProgress(total=100, title='1 thread'))
      progress_manager.put(str(1002), LineProgress(total=100, title='2 thread'))
      progress_manager.put(str(1003), LineProgress(total=100, title='3 thread'))
      progress_manager.put(str(1004), CircleProgress(title='4 thread'))
      
      ... ...
      
      progress_manager.update(key, progress)
      
      • 圆形加载条使用update(progress)实例方法进行刷新,只有当参数大于0时才会转动。

      • 线性进度条使包含4个可选参数:

        @param total : 进度总数
        @param symbol : 进度条符号
        @param width : 进度条展示的长度
        @param title : 进度条前面展示的文字
        

        创建实例后调用update(progress)实例方法更新进度。

      • 多行进度显示使用MultiProgressManager类,实例化该类,调用put(key,progressBar)方法统一管理多个进度条,内部使用一个dict来收集进度条,多行显示的顺序为put的顺序。更新某个进度条时使用progressMangager的update(key,progress)方法,该key为put进度条时使用的key。

      • 无论是使用多行进度条混合还是使用单行进度条,都不用考虑多线程更新的问题,内部已用Lock()加锁。

      • 详细样例请看源码:Sample源码

    原理

    • 利用 使光标回到本行的行首位置,不使用Python的print()函数,该函数会自动换行,当然你也可以指定print()函数的end参数让其不换行,如:

      print('Complete',end='')
      

      我这里使用sys.stdout.write()来输出字符:

      sys.stdout.write('Complete')
      
    • 使用ANSI终端指令码33[K清除光标后面的字符。

    • 使用33[F使用光标回到上一行,这里要注意,光标回到上一行后下面的一行会被清除。

    • 使用threading.Lock()加锁,在多线程更新进度时确保安全。

    • 抽象类ProgressBar下面有两个子类,分别为LineProgress和 CircleProgress,可单独使用这两个子类来显示单行的进度条。

    • 多行显示进度条时使用MultiProgressManager类来管理,把ProgressBar实现类put到MultiProgressManager类里面,用dict来管理,MultiProgressManager提供统一的update(key,progress)实例方法来指定更新哪一行的进度条。

    • 详细请看源码:Sample源码

    注意事项

    • 请在Python3环境下使用。
    • 请不要IDE的运行方式使用,需在终端(terminal)下使用。

    源码

    作者:竹尘居士

    源码地址:https://github.com/homgwu/eprogress

  • 相关阅读:
    ArcEngine:GP使用!没道理的错误!
    XMLHttpRequest的亲密接触(1)——简单讲解
    XMLHttpRequest的亲密接触(2.2)——表单提交
    初入Ajax,需要明确的Web工作原理
    文章收藏明细
    【备忘】Oracle10g 创建、删除表空间、创建、授权用户
    proxool的使用总结
    Java操作压缩与解压缩
    解决jquery ui dialog中调用datepicker时日期选择控件被遮挡的问题
    如何读取jar包中的xml等资源文件
  • 原文地址:https://www.cnblogs.com/homg/p/7232540.html
Copyright © 2011-2022 走看看