I am writing a little application to download files over http (as, for example, described here).
I also want to include a little download progress indicator showing the percentage of the download progress.
Here is what I came up with:
sys.stdout.write(rem_file + '...') urllib.urlretrieve(rem_file, loc_file, reporthook=dlProgress) def dlProgress(count, blockSize, totalSize): percent = int(count*blockSize*100/totalSize) sys.stdout.write('%2d%%' % percent) sys.stdout.write('\b\b\b') sys.stdout.flush()
Output: MyFileName… 9%
Any other ideas or recommendations to do this?
One thing that’s somewhat annoying is the blinking cursor in the terminal on the first digit of the percentage. Is there a way to prevent this? Is there a way to hide the cursor?
EDIT:
Here a better alternative using a global variable for the filename in dlProgress and the ‘\r’ code:
global rem_file # global variable to be used in dlProgress urllib.urlretrieve(rem_file, loc_file, reporthook=dlProgress) def dlProgress(count, blockSize, totalSize): percent = int(count*blockSize*100/totalSize) sys.stdout.write('\r' + rem_file + '...%d%%' % percent) sys.stdout.flush()
Output: MyFileName…9%
And the cursor shows up at the END of the line. Much better.
There’s a text progress bar library for python at http://pypi.python.org/pypi/progressbar/2.2 that you might find useful: