python progressbar库,为长时间运行的操作提供可视(但基于文本)进度。
progressbar2的Python项目详细描述
特拉维斯状态:
覆盖范围:
安装
软件包可以通过pip安装(这是推荐的方法):
pip install progressbar2
或者,如果没有pip,那么也可以使用easy_install:
easy_install progressbar2
或者从pypi(https://pypi.python.org/pypi/progressbar2)或github下载最新版本。
请注意,pypi上的版本是用我的gpg密钥(https://pgp.mit.edu/pks/lookup?op=vindex&search=0xE81444E9CE1F695D)签名的,可以使用gpg进行检查:
gpg –verify progressbar2-<version>.tar.gz.asc progressbar2-<version>.tar.gz
简介
文本进度条通常用于显示 运行操作,提供处理正在进行的视觉提示。
progressbar类管理当前进度和行的格式 由许多小部件提供。小部件是一个可以显示的对象 取决于进度条的状态。有很多类型 小工具数量:
progressbar模块非常容易使用,但功能非常强大。它也会 系统支持时自动启用自动调整大小等功能。
已知问题
由于空闲shell和jetbrains(pycharm)shell中的限制,progressbar不能在这些shell中正常工作。
- 空闲编辑器根本不支持这些类型的进度条:https://bugs.python.org/issue23220
- jetbrains(pycharm)编辑器部分工作,但会中断快速输出。作为一种解决方法,请确保您同时只写入sys.stdout(常规打印)或sys.stderr。如果您确实计划同时使用这两种方法,请确保等待大约200毫秒以获得下一个输出,否则它将定期中断。链接问题:https://github.com/WoLpH/python-progressbar/issues/115
- Jupyter笔记本缓冲区sys.stdout可能导致混合输出。使用以下命令可以轻松解决此问题:import sys;sys.stdout.flush()。链接问题:https://github.com/WoLpH/python-progressbar/issues/173
链接
用法
使用python progressbar有很多方法,您可以看到一些基本的示例 但是在示例文件中还有更多。
包装iterable
importtimeimportprogressbarforiinprogressbar.progressbar(range(100)):time.sleep(0.02)
记录
的进度条带有日志记录的progressbar需要在 streamhandler已初始化。确保strderr流 准时重定向请确保在之前调用progressbar.streams.wrap_stderr() 初始化记录器。
强制提前初始化的一个选项是使用wrap stderr 环境变量,在Linux/Unix系统上,可以通过:
# WRAP_STDERR=true python your_script.py
如果包装时需要手动冲洗,可以使用:
importprogressbarprogressbar.streams.flush()
在大多数情况下,只要初始化 streamhandler在包装之后。
importtimeimportloggingimportprogressbarprogressbar.streams.wrap_stderr()logging.basicConfig()foriinprogressbar.progressbar(range(10)):logging.error('Got %d',i)time.sleep(0.2)
上下文包装器
importtimeimportprogressbarwithprogressbar.ProgressBar(max_value=10)asbar:foriinrange(10):time.sleep(0.1)bar.update(i)
将ProgressBars与打印输出相结合
importtimeimportprogressbarforiinprogressbar.progressbar(range(100),redirect_stdout=True):print('Some text',i)time.sleep(0.1)
未知长度的progressbar
importtimeimportprogressbarbar=progressbar.ProgressBar(max_value=progressbar.UnknownLength)foriinrange(20):time.sleep(0.1)bar.update(i)
带有自定义小部件的栏
importtimeimportprogressbarwidgets=[' [',progressbar.Timer(),'] ',progressbar.Bar(),' (',progressbar.ETA(),') ',]foriinprogressbar.progressbar(range(20),widgets=widgets):time.sleep(0.1)
带有宽中文(或其他多字节)字符的条形图
# vim: fileencoding=utf-8importtimeimportprogressbardefcustom_len(value):# These characters take up more spacecharacters={'进':2,'度':2,}total=0forcinvalue:total+=characters.get(c,1)returntotalbar=progressbar.ProgressBar(widgets=['进度: ',progressbar.Bar(),' ',progressbar.Counter(format='%(value)02d/%(max_value)d'),],len_func=custom_len,)foriinbar(range(10)):time.sleep(0.1)