Hope this code might help or at least point
you in the correct direction.
Regards,
Larry Bates
Syscon, Inc.
Title: Console (text) progress indicator class
Description:
I was finding that I needed a progress indicator for Linux and Windows
console applications that could be used to show the user that work was
progressing and how much of the total work that had been completed. I
finally broke down and wrote this class that seems to do exactly what I
wanted. Since I continue to see questions about how to write such a class on
Comp.Lang.Python, I thought I'd donate it to this Cookbook archive.
Source:
Note: Your final code will have syntax highlighting
# CLASS NAME: DLLInterface
#
# Author: Larry Bates (
[email protected])
#
# Written: 12/09/2002
#
# Released under: GNU GENERAL PUBLIC LICENSE
#
#
class progressbarClass:
def __init__(self, finalcount, progresschar=None):
import sys
self.finalcount=finalcount
self.blockcount=0
#
# See if caller passed me a character to use on the
# progress bar (like "*"). If not use the block
# character that makes it look like a real progress
# bar.
#
if not progresschar: self.block=chr(178)
else: self.block=progresschar
#
# Get pointer to sys.stdout so I can use the write/flush
# methods to display the progress bar.
#
self.f=sys.stdout
#
# If the final count is zero, don't start the progress gauge
#
if not self.finalcount : return
self.f.write('\n------------------ %
Progress -------------------1\n')
self.f.write(' 1 2 3 4 5 6 7 8 9 0\n')
self.f.write('----0----0----0----0----0----0----0----0----0----0\n')
return
def progress(self, count):
#
# Make sure I don't try to go off the end (e.g. >100%)
#
count=min(count, self.finalcount)
#
# If finalcount is zero, I'm done
#
if self.finalcount:
percentcomplete=int(round(100*count/self.finalcount))
if percentcomplete < 1: percentcomplete=1
else:
percentcomplete=100
#print "percentcomplete=",percentcomplete
blockcount=int(percentcomplete/2)
#print "blockcount=",blockcount
if blockcount > self.blockcount:
for i in range(self.blockcount,blockcount):
self.f.write(self.block)
self.f.flush()
if percentcomplete == 100: self.f.write("\n")
self.blockcount=blockcount
return
if __name__ == "__main__":
from time import sleep
pb=progressbarClass(8,"*")
count=0
while count<9:
count+=1
pb.progress(count)
sleep(0.2)
pb=progressbarClass(100)
pb.progress(20)
sleep(0.2)
pb.progress(47)
sleep(0.2)
pb.progress(90)
sleep(0.2)
pb.progress(100)
print "testing 1:"
pb=progressbarClass(1)
pb.progress(1)
Discussion:
Programs that run (FTP downloads, database insertions, etc.) sometimes
require visual feedback to the user as to the progress of the task that is
running. This progress bar class provides an easy to implement way of
showing the percentage of completion that is updated periodically by the
program.