一个简单、易用的Python命令行(terminal)进度条库
eprogress 是一個(gè)簡(jiǎn)單、易用的基于Python3的命令行(terminal)進(jìn)度條庫(kù),可以自由選擇使用單行顯示、多行顯示進(jìn)度條或轉(zhuǎn)圈加載方式,也可以混合使用。
示例
單行進(jìn)度條
多行進(jìn)度條
圓形加載
混合顯示
特性
使用簡(jiǎn)單,實(shí)例化一個(gè)Progress對(duì)象,調(diào)用update方法即可刷新進(jìn)度
不依賴任何第三方庫(kù)。
可定制進(jìn)度符號(hào),title,顯示寬度,個(gè)性化顯示。
多行、單行顯示進(jìn)度、圓形轉(zhuǎn)圈加載隨意搭配。
多線程安全,可在多個(gè)線程中更新進(jìn)度條。
使用方法
導(dǎo)入eprogress
from eprogress import LineProgress, CircleProgress, MultiProgressManager
實(shí)例化進(jìn)度條對(duì)象,更新進(jìn)度
# 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)實(shí)例方法進(jìn)行刷新,只有當(dāng)參數(shù)大于0時(shí)才會(huì)轉(zhuǎn)動(dòng)。
線性進(jìn)度條使包含4個(gè)可選參數(shù):
@param total : 進(jìn)度總數(shù)
@param symbol : 進(jìn)度條符號(hào)
@param width : 進(jìn)度條展示的長(zhǎng)度
@param title : 進(jìn)度條前面展示的文字
創(chuàng)建實(shí)例后調(diào)用update(progress)實(shí)例方法更新進(jìn)度。
多行進(jìn)度顯示使用MultiProgressManager類,實(shí)例化該類,調(diào)用put(key,progressBar)方法統(tǒng)一管理多個(gè)進(jìn)度條,內(nèi)部使用一個(gè)dict來(lái)收集進(jìn)度條,多行顯示的順序?yàn)閜ut的順序。更新某個(gè)進(jìn)度條時(shí)使用progressMangager的update(key,progress)方法,該key為put進(jìn)度條時(shí)使用的key。
無(wú)論是使用多行進(jìn)度條混合還是使用單行進(jìn)度條,都不用考慮多線程更新的問(wèn)題,內(nèi)部已用Lock()加鎖。
詳細(xì)樣例請(qǐng)看源碼:Sample源碼
原理
利用使光標(biāo)回到本行的行首位置,不使用Python的print()函數(shù),該函數(shù)會(huì)自動(dòng)換行,當(dāng)然你也可以指定print()函數(shù)的end參數(shù)讓其不換行,如:
print('Complete',end='')
我這里使用sys.stdout.write()來(lái)輸出字符:
sys.stdout.write('Complete')
使用ANSI終端指令碼33[K清除光標(biāo)后面的字符。
使用33[F使用光標(biāo)回到上一行,這里要注意,光標(biāo)回到上一行后下面的一行會(huì)被清除。
使用threading.Lock()加鎖,在多線程更新進(jìn)度時(shí)確保安全。
抽象類ProgressBar下面有兩個(gè)子類,分別為L(zhǎng)ineProgress和 CircleProgress,可單獨(dú)使用這兩個(gè)子類來(lái)顯示單行的進(jìn)度條。
多行顯示進(jìn)度條時(shí)使用MultiProgressManager類來(lái)管理,把ProgressBar實(shí)現(xiàn)類put到MultiProgressManager類里面,用dict來(lái)管理,MultiProgressManager提供統(tǒng)一的update(key,progress)實(shí)例方法來(lái)指定更新哪一行的進(jìn)度條。
詳細(xì)請(qǐng)看源碼:Sample源碼
注意事項(xiàng)
請(qǐng)?jiān)赑ython3環(huán)境下使用。
請(qǐng)不要IDE的運(yùn)行方式使用,需在終端(terminal)下使用。
源碼
作者:竹塵居士
源碼地址:https://github.com/homgwu/eprogress
總結(jié)
以上是生活随笔為你收集整理的一个简单、易用的Python命令行(terminal)进度条库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CAD如何设置自动备份文件及保存
- 下一篇: CAD2004怎么修改标注数值