How To/python/MyMiscUtils/

# -*- coding: utf-8 -*-
 
import sys
 
class AsciiProgressBar:
    def __init__(self, max=None, berLength=50, foreground=chr(219), background=chr(177)):
        self.max = 20 if max == None else max
        self.__barLength = berLength
        self.__fg = foreground
        self.__bg = background
        self.__setDefaults()
 
    def __setDefaults(self):
        self.__step = (1.0 * self.__barLength)/self.max
 
    def current(self, value, message = ''):
        """ Sets current value. Optional {message} is displayed after progress bar. """
        x = int(self.__step * (value % (self.max + 1)))
        pb = ' ' + (x * self.__fg) + (self.__bg * (self.__barLength - x)) + '%s'
        sys.stdout.write((pb % message))
        sys.stdout.write(b'\r')
 
    def setMax(self, max):
        """ Set max value. """
        self.max = max
        self.__setDefaults()
 
    def setBarLength(self, length=50):
        """ Sets lenght of progress bar. """
        self.__barLength = length
        self.__setDefaults()
 
    def setForeground(self, fg):
        self.__fg = fg
 
    def setBackground(self, bg):
        self.__bg = bg
 
 
if __name__ == "__main__":
    """ http://www.asciitable.com/ """
    import time
    pb = AsciiProgressBar(299, 40)
    print '\n\n'
    for i in xrange(300):
        pb.current(i, ' current i is %s' % i)
        time.sleep(0.01);
    print ''