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 中的文档
欢迎关注
微信公众号:面向人生编程
编程思维不应只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。
Python 输出命令行进度条的更多相关文章
- PHP生成linux命令行进度条
<?php$total = 100; for ($i = 1; $i <= $total; $i++) { printf("progress: [%-50s] %d%% Done ...
- [Python]命令行进度条
关键点是输出'\r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. import time import sys def progress_test(): bar_length= ...
- python实现命令行解析的argparse的使用
参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...
- Python:如何显示进度条
首先,推荐一个组件:progressive 效果如下: 进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过std ...
- 基于Python与命令行人脸识别项目(系列一)
Face Recognition 人脸识别 摘要:本项目face_recognition是一个强大.简单.易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,方便大家使用.对于本项目可以使用 ...
- python制作命令行工具——fire
python制作命令行工具--fire 前言 本篇教程的目的是希望大家可以通读完此篇之后,可以使用python制作一款符合自己需求的linux工具. 本教程使用的是google开源的python第三方 ...
- python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis
目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...
- 仿微信中加载网页时带线行进度条的WebView的实现
finddreams:http://blog.csdn.net/finddreams/article/details/44172639 为了仿微信中加载网页时带进度条的WebView的实现,首先我们来 ...
- 【python】命令行解析工具argparse用法
python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...
随机推荐
- eclipse打开jsp的方式怎么设置成默认
https://jingyan.baidu.com/article/4ae03de34137be3eff9e6b93.html
- 关于ViewPager高度自适应(随着pager页的高度改变Viewpager的高度)
该博客借鉴的是某位大神的博客 我只是写一下用后感和总结 博客链接地址 http://blog.csdn.net/qq_34972666/article/details/52386999?locatio ...
- java emoji表情存储解决方案
1.问题产生情况 我遇到这个问题是做微信开发的时候有些有用的头像用了微信的emoji表情,然而我的mysql数据库用的编码是utf8_general_ci,就是utf-8编码,结果也就报错误了. 2. ...
- ObjextARX-VS2005-字符串转换
1.使用string必须添加头文件 #include"string"using namespace std; 2.使用CString必须添加头文件(在非MFC工程中) #inclu ...
- Spring mvc简单案例
jar包 <!--junit--><dependency> <groupId>junit</groupId> <artifactId>jun ...
- LogBack日志小记
优势 看了一下Logback的官方文档,说换成LogBack的原因大概有一下几个: 1. 说是logBack的设计开发和log4j是同一批人员,重写了内核,习惯上总体跟log4j一样,不会有太多生疏感 ...
- [问题记录]Ubuntu下chmsee安装失败的解决
日期:2016年2月26日 一直在找Ubuntu下查看chm的工具但是普遍不理想,发现在deepin中的chmsee相对比较好,但是直接执行网上的sudo apt-get install chmsee ...
- 用java代码写一个简单的网上购物车程序
需求:1.写一个商品类,有商品编号.商品名称.商品分类.商品单价属性.2.写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法. 3.写一个购物车类,有添加商品方法.查看订单信息,删除商品,修 ...
- JBOSS默认连接池配置
jboss5.0mysql连接配置 <?xml version="1.0" encoding="UTF-8"?> <!-- The Hyper ...
- 异步 Thread
Threads 最早的版本,微软推荐不要再使用Thread了thread不支持带返回值的方法本身也没有线程回调,但是可以自己做一个 private void btnThreads_Click(obje ...