progressbar.py
#!python2
#-*-encoding:utf8-*-
import os
import sys
import time
class ProgressBar:
def __init__(self, maxVal):
self._maxVal = maxVal
self._progress = 0
self._start_time = 0.0
def start(self):
print ""
self._start_time = time.time()
self.refresh()
def update(self, delta):
self._progress += delta
self.refresh()
def _getSizeString(self, len):
s = ""
if len >= 1024 * 1024:
s = "%.1fM" % (float(len) / (1024 * 1024))
elif len >= 1024:
s = "%.1fK" % (float(len) / (1024))
else:
s = "%dB" % (len)
return s
def refresh(self):
per = float(self._progress)/ self._maxVal
sys.stdout.write("%5.1f%%" % (per*100))
plen = 45
n1 = int(per * plen)
sys.stdout.write(" [" + "#" * n1 + "-" * (plen-n1) + ']')
sys.stdout.write(" %s/%s" % (self._getSizeString(self._progress), self._getSizeString(self._maxVal)))
sys.stdout.write(" %s/S " % ( self._getSizeString(self._progress/(time.time() - self._start_time))))
sys.stdout.write("\r")
self.flush()
def flush(self):
sys.stdout.flush()
def main():
maxV = 100*1024*1000
pbar = ProgressBar(maxV)
pbar.start()
n = 0
while n < maxV:
sz = 2654100
if (maxV - n) < sz:
sz = maxV - n
pbar.update(sz)
n += sz
time.sleep(1)
if __name__ == '__main__':
main()