命令行进度条
跑一个大点的项目时,经常有显示进度条。
具体的实现方案如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import sys import time
class ProgressBar: """动态进度条""" def __init__(self, start=0, stop=100, step=1,width=50): """ 初始化参数表 start:起始记录 stop:总记录 width:显示器上的任务条宽度 step:每完成一个任务的进度 prgress:表示当前进度的屏幕长度 """ self.current = start self.total = stop self.width = width self.step = step self.progress = int(self.width * self.current / self.total) self.end = False
def move(self): """ 完成一个任务的进度 step:每完成一个任务的进度,传入参数将修改类的此项属性 """ self.current += self.step self.progress = int(self.width * self.current / self.total)
def log(self): """ 在控制台输出当前进度条 """ if not self.end: sys.stdout.write(' ' * (self.width + 18) + '\r') sys.stdout.flush() sys.stdout.write(str(self.current)+'/'+str(self.total)+'='+'%.2f'%(self.current*100/self.total)+'% ') sys.stdout.write("[" + '#' * self.progress + '-' *(self.width - self.progress) + "]\r") if self.width <= self.progress: sys.stdout.write('\n') self.end = True sys.stdout.flush()
if __name__=="__main__": print("\n"*3) bar = ProgressBar(start=0, stop=194, step=1) for i in range(0, 194, 1): bar.move() bar.log() time.sleep(0.05)
|
需要注意的是,
for i in range(start,stop,step)
ProgressBar(start,stop,step)
三个参数需要一致,然后将bar.move()
加入项目的完成一步之后。bar.log()
能够实时更新就行,简单点可以放在bar.mve()
后面。
这只是一个雏形,可以当成模板,具体如要显示其他的内容,例如项目步骤的详细内容等,在log()
函数中实现即可。