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

- 多行进度条

- 圆形加载

- 混合显示

特性
- 使用简单,实例化一个Progress对象,调用update方法即可刷新进度
- 不依赖任何第三方库。
- 可定制进度符号,title,显示宽度,个性化显示。
- 多行、单行显示进度、圆形转圈加载随意搭配。
- 多线程安全,可在多个线程中更新进度条。
使用方法
- 导入
eprogress
python from eprogress import LineProgress, CircleProgress, MultiProgressManager
- 实例化进度条对象,更新进度
```py
# 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个可选参数:
python @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参数让其不换行,如:
py print('Complete',end='')
我这里使用sys.stdout.write()来输出字符:
py sys.stdout.write('Complete')
使用ANSI终端指令码
\033[K清除光标后面的字符。使用
\033[F使用光标回到上一行,这里要注意,光标回到上一行后下面的一行会被清除。使用threading.Lock()加锁,在多线程更新进度时确保安全。
抽象类ProgressBar下面有两个子类,分别为LineProgress和 CircleProgress,可单独使用这两个子类来显示单行的进度条。
多行显示进度条时使用MultiProgressManager类来管理,把ProgressBar实现类put到MultiProgressManager类里面,用dict来管理,MultiProgressManager提供统一的update(key,progress)实例方法来指定更新哪一行的进度条。
详细请看源码:Sample源码
注意事项
- 请在Python3环境下使用。
- 请不要IDE的运行方式使用,需在终端(terminal)下使用。
源码
作者:竹尘居士
一个简单、易用的Python命令行(terminal)进度条库的更多相关文章
- laravel 命令行输出进度条
有时候我们想在命令行执行一些耗时的命令,我们可以利用 symfony 提供的进度条相关的类,来输出一个进度条,显示当前的处理进度. 参考:http://symfony.com/doc/current/ ...
- Python学子之如何退出python 命令行
python命令行是新手学习python过程中必须要学的一个工具,下面我们来看一下怎么退出python命令行. 工具/原料 python2.7 方法/步骤 1.我们这里使用的是python3.6版本, ...
- Python 命令行之旅 —— 初探 argparse
『讲解开源项目系列』启动--让对开源项目感兴趣的人不再畏惧.让开源项目的发起者不再孤单.跟着我们的文章,你会发现编程的乐趣.使用和发现参与开源项目如此简单.欢迎联系我们给我们投稿,让更多人爱上开源.贡 ...
- 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- 用什么库写 Python 命令行程序?看这一篇就够了
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- 快速上手 Python 命令行模块 Click
关于Click? 说下 Click 模块是干啥的,简单说,它就是把我们的 Python 脚本的一些函数,通过 添加带有 Click 关键字的装饰器进行装饰进而将函数调用的形式转化为命令行传参的形式然后 ...
- Python命令行参数及文件读出写入
看完了柯老板的个人编程作业,虽然是评测组不用做此次作业,但还是想对本次作业涉及到利用Python命令行参数以及进行文件读出写入操作做一个简单的总结.(个人编程作业还是想自己能敲一敲,毕竟我的码力还是小 ...
- 分享一个简单易用的RPC开源项目—Tatala
http://zijan.iteye.com/blog/2041894 这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务.后来不断增 ...
- 一个简单易用的容器管理平台-Humpback
什么是Humpback? 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是继续称 Docker). 在 Docker-百度百科 中,对 Docker 已经解释得很清 ...
随机推荐
- leetcode算法题(JavaScript实现)
题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象.String对象等原生方法,构造函数. ...
- [Leetcode] Binary tree Zigzag level order traversal二叉树Z形层次遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- Coursera 机器学习笔记(二)
主要为第三周课程内容:逻辑回归与正则化 逻辑回归(Logistic Regression) 一.逻辑回归模型引入 分类问题是指尝试预测的是结果是否属于某一个类. 维基百科的定义为:根据已知训练区提供的 ...
- MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...
- Linux_Ununtu 16.04 的下载安装并部署.Net Core 网站
第一次接触Linux也难免有些懵逼,因为公司项目必须用.Net Core 开发一个后端服务应用:第一次用Linux给我的感觉就像在用2000年的手机一样:没用智能的操作:让人崩溃的用户体验.说多了都是 ...
- 用户权限模块之spring security
准备工作:数据库采用mysql(5.6及以上) CREATE TABLE `auth_system` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'I ...
- vue-cli创建自己的项目
vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一. ...
- 非滤波单目视觉slam笔记1
非滤波单目视觉slam 主要分为以下8部分 数据类型 数据关联 初始化 位姿估计 地图维护 地图生成 失效恢复 回环检测 数据类型 直接法(稠密,半稠密) 基本原理是亮度一致性约束,\(J(x,y) ...
- PHP数组按引用传递
<?php /**PHP数组按引用传递**/ $arr = array( array('id' => 1, 'name' => 'name1'), array('id' => ...
- 国内互联网公司github网址
-----------------------------------------------------推荐技术------------------------------------------- ...