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 ... 
随机推荐
- 转 SecureCRT 使用X11 转发功能打开图形化窗口
			https://yq.aliyun.com/articles/53308 摘要: 有些时候,有些程序可能需要依赖图形界面才能启动,例如安装Oracle时(其实oracle支持命令行安装),例如需要启动 ... 
- Linux上的常用命令(含在Linux上部署springboot工程所要用到的命令)
			日常使用命令: 开关机:(shutdown命令的时间参数似乎是一定要的) shutdown -h now ——h的意思就是服务停掉之后立即关系,shutdown命令的时间参数是必须要的,now相当于是 ... 
- 关于@Mapper和@Repository的一点小理解
			参考博客:https://blog.csdn.net/lalioCAT/article/details/51803461 如果在接口上@Mapper,然后再在 xml中的namespace指向mapp ... 
- axios delete 请求
			axios delete 请求 在传递一个参数的时候,直接把参数放在请求连接后面,用'/' 连接就可以了 this.axios.post(this.APIURL+'/'+ID) //http://ww ... 
- 如何正确在IDEA 里非maven或非SBT构建的项目中引入lib的jar包(图文详解)
			以下是我,手动的一个项目 假设,大家,还需要导入 导入spark的jar包:是安装主目录下的jars所有jar包和examples/jars包. 
- 牛客网Java刷题知识点之什么是死锁、死锁产生的4个必要条件、死锁的解除与预防
			不多说,直接上干货! https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=16 ... 
- Unity Shader入门精要学习笔记 - 第5章 开始 Unity Shader 学习之旅
			一个顶点/片元 着色器的结构大概如下: Shader "MyShaderName" { Properties { //属性 } SubShader { //针对显卡A的SubSha ... 
- CSS 条纹背景深入
			一.水平渐变 实现水平条纹很简单 <!DOCTYPE html> <html lang="en"> <head> <meta charse ... 
- Mysql优化配置
			Mysql配置优化 一.环境介绍 Mysql版本:5.5.27 二.优化内容 字段 介绍 推荐值 skip-locking 避免MySQL的外部锁定,减少出错几率增强稳定性 back_log MySQ ... 
- 解析Javascript事件冒泡机制(转)
			本文转自:http://blog.csdn.net/luanlouis/article/details/23927347 1. 事件 在浏览器客户端应用平台,基本生都是以事件驱动的,即某个事件发生,然 ... 
