python命令窗口显示进度条,一个简单、易用的Python命令行(terminal)进度条库

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

示例单行进度条

AAffA0nNPuCLAAAAAElFTkSuQmCC

progress_sample_line.gif

多行进度条

AAffA0nNPuCLAAAAAElFTkSuQmCC

progress_sample_multi_line.gif圆形加载

AAffA0nNPuCLAAAAAElFTkSuQmCC

progress_sample_cicle.gif混合显示

AAffA0nNPuCLAAAAAElFTkSuQmCC

progress_sample_multi_mix.gif

特性使用简单,实例化一个Progress对象,调用update方法即可刷新进度

不依赖任何第三方库。

可定制进度符号,title,显示宽度,个性化显示。

多行、单行显示进度、圆形转圈加载随意搭配。

多线程安全,可在多个线程中更新进度条。

使用方法导入eprogressfrom eprogress import LineProgress, CircleProgress, MultiProgressManager

实例化进度条对象,更新进度# 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 progressprogress_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源码

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

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

使用ANSI终端指令码\033[K清除光标后面的字符。

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

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

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

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

注意事项请在Python3环境下使用。

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

作者:竹尘居士

链接:https://www.jianshu.com/p/41435ff72719

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值