本文适合有Python基础的朋友—alive-progress,项目地址:https://github.com/rsalmei/al...不知道如果你有过这样的经历:你写了一个程序,每次运行起来都要花很长时间。在等待程序运行的过程中,您反复按Enter以防止程序卡住。或者你的task需要实时知道程序的运行进度,但是你不知道程序执行到哪里了...现在,alive-progress来了。是Python下的一个进度条库。不仅简单易用还支持多种炫酷显示效果!先来看看示例效果:一起来玩转这个库吧!1、Python下安装,使用pip安装:pipinstallalive-progress2、快速入门2.1直接使用循环使用alive-progress是最常见的用法。脚本可以这样写:#导入alive-progress库fromalive_progressimportalive_barimporttime#使用with语句创建一个进度条withalive_bar(100)asbar:#将进度条总数传给alive_bar(100here)foriteminrange(100):#Waitfor1stime.sleep(.1)#更新进度条,progress+1bar()请注意,如果动画无法正常显示,请尝试添加参数force_tty=忠于alive_bar。运行上面的代码,我们可以看到终端中出现了一个相当华丽的动态进度条:需要注意的是alive-progress不会像tqdm等进度条库那样自动更新,只有当我们的程序调用bar时才会让Progressbar+1。当然我们也可以不给进度条传入总数这个参数。这时候进度条不会显示进度,进入未定义模式:有时候我们想直接操作显示的位置。这时候我们可以设置alive_bar的manual参数为True:fromalive_progressimportalive_barimporttimetotal=100withalive_bar(total,manual=True)asbar:#total不能指定,此时只能指定百分比bar(0.5)#进度到50%time.sleep(0.5)bar(0.1)#进度到10%time.sleep(0.5)bar(0.75)#进度到75%time.sleep(0.5)bar(1.0)#进度到100%time.sleep(0.5)bar(10)#进度到1000%foriinrange(1,101):bar(i/100)#设置进度为i%time.sleep(0.05)当然我们还需要输出运行过程中的一些提示信息,可以直接使用print输出一行提示信息,不破坏进度条。text方法可以在进度条末尾添加后缀字符,title参数可以为进度条添加标题(前缀信息)。具体用法和效果如下:fromalive_progressimportalive_barimporttime#定义标题(前缀字符)为HelloGitHubwithalive_bar(10,title="HelloGitHub")asbar:foriinrange(10):time.sleep(1)bar()#让进度条+1bar.text("DoningWork#%d"%(i+1))#更新进度条后缀print("Work#%dfinished"%i)#输出一行信息2.2添加一些技巧传统进度条样式看多了,想换个样式?没问题,alive-progress不仅内置了多种进度条样式,还支持自定义格式。进度条可以自定义两种样式:bar和spinner。只需要在调用alive_bar时传入相应的参数即可。以这个进度条为例,中间最长的是进度条,旁边来回晃动的www.HelloGitHub.com是微调器。alive-progress内置了多种bar和spinner样式,你只需要调用show_bars或show_spinners即可快速预览对应的样式,例如:fromalive_progressimportshow_barsshow_bars()#查看内置bar样式fromalive_progressimportshow_spinnersshow_spinners()#Viewbuilt-inspinnerstyles默认样式使用起来非常简单。比如我要使用气泡条和message_scrolling的spinner,直接传入对应的名字即可:fromalive_progressimportalive_barimporttime#alive_bar(100,title="HelloGitHub",bar="bubbles",spinner="message_scrolling")asbar:foriinrange(100):time.sleep(.1)bar()如果不知道总数,可以使用未知参数(这次会替换barisspinner):fromalive_progressimportalive_barimporttimewithalive_bar(title="HelloGitHub",#注意:这里bar替换为unknown,内置样式名称与spinner相同unknown="stars",spinner="message_scrolling")asbar:foriinrange(100):time.sleep(.1)bar()3.私人定制你可能更喜欢定制进度条而不是直接使用内置模板,而alive-progress也为此提供了相应的方法。3.1自定义bar可以使用standard_bar_factory方法快速自定义bar。bar可以设置的参数有五个:chars:正在执行该单元的动画,按照进度依次显示。borders:进度条边框,显示在左右两侧。背景:本机显示的内容不执行。tip:执行单元的前导符号。errors:出现错误时显示的字符(进度未完成,超过总值等)。比如我们要制作如图所示的bar:我们可以这样写:fromalive_progressimportalive_bar,standard_bar_factoryimporttime##------custombar--------##my_bar=standard_bar_factory(#以下参数都有默认值,不用一下子全部修改chars="123456789#",#加载时会根据进度依次显示,边框长度不限="<>",#bar两端的边框background=".",#未加载部分填充"."tip=">",#指示前进方向的引导符号(分隔“#”and".")errors="??"??#出错时显示的内容(未完成,溢出))##--------自定义结束--------####-------动画演示--------##withalive_bar(10,title="HelloGitHub",bar=my_bar,#传入新定制的barspinner="message_scrolling",manual=True)asbar:foriinrange(50):time.sleep(.1)bar(i/100)bar(.5)time.sleep(2)bar(10)print("Overflow")time.sleep(1)bar(1)print("100%完成")time.sleep(1)bar(.1)print("notcompleted")3.2自定义spinner对于spinner,alive-progress提供了更多的动画定义方法:frame_spinner_factory:将传入的字符串一一输出:fromalive_progressimportalive_bar,frame_spinner_factoryimporttimemy_spinner=my_spinner=frame_spinner_factory(r'-----',r'1----',r'-2---',r'--3--',r'---4-',r'----5')#直接传入字符串withalive_bar(title="HelloGitHub",spinner=my_spinner)asbar:whileTrue:bar()time.sleep(.1)可以看到字符串一一循环输出scrolling_spinner_factory:滚动要播放的字符串fromalive_progressimportalive_bar,scrolling_spinner_factoryimporttimemy_spinner=scrolling_spinner_factory(chars="HelloGitHub",#要播放的字符串长度=15,#spinnerareawidthblank='.'#空白部分填充字符)withalive_bar(title="HelloGitHub",spinner=my_spinner)asbar:whileTrue:bar()time.sleep(.1)bouncing_spinner_factory:滚动两个字符串交替广播fromalive_progressimportalive_bar,bouncing_spinner_factoryimporttimemy_spinner=bouncing_toryspinner_right_chars="Ilove",#从左边输入的字符串length=15,#spinner区域的长度left_chars="HelloGitHub",#从右边输入的字符串blank='.',#空白区域填充字符)withalive_bar(title="HelloGitHub",spinner=my_spinner)asbar:whileTrue:bar()time.sleep(.1)当然left_chars参数也可以省略,效果等同于Ilovewill像弹球一样左右弹跳unknown_bar_factory:将微调器转换为可在未定义模式下使用的格式:fromalive_progressimportalive_bar,unknown_bar_factory,bouncing_spinner_factoryimporttimemy_spinner=bouncing_spinner_factory("www.HelloGitHub.com",15,hiding=false)bar_unk(bar_own(bar_own)my_spinner)#传入定义好的spinnerwithalive_bar(title="HelloGitHub",unknown=my_unknown_bar)asbar:whileTrue:bar()time.sleep(.1)4.最后相信你掌握了alive_progress的基础在玩法方面,alive-progress也提供了一些不同场合需要的特殊功能。感兴趣的朋友可以通过阅读官方文档或者源码来更深入的了解。这次的内容就到这里了,快去打造属于你自己的进度条吧!关注HelloGitHub公众号以接收最新更新。还有更多开源项目介绍和宝藏项目等你发现。
