我正在編寫一個小應用程序來通過http下載文件(例如,描述爲here)。如何在Python中編寫下載進度指示器?
我還想包括一個下載進度指示器,顯示下載進度的百分比。
這裏是我想出了:
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()
輸出:MyFileName的... 9%
任何其他的想法或建議這樣做呢?
有點煩人的一件事是百分比的第一個數字在終端閃爍的光標。有沒有辦法來防止這種情況?有沒有辦法隱藏光標?
編輯:
這裏使用全局變量在dlProgress文件名和 '\ r' 的代碼更好的選擇:
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()
輸出:MyFileName的... 9%
然後光標出現在行的結尾處。好多了。
'全球rem_file`有道理只有在你將它綁定到一個新對象`rem_file = ...`的函數內,否則(如果你只是讀取它的值)`global rem_file`是沒有必要的。 – jfs 2008-12-14 13:04:51
你也可以在標準輸出上做一個/ r + flush()。我只是猜測這是基於您提到的終端行爲在Windows中運行。 – meawoppl 2014-05-02 20:53:54
相關http://stackoverflow.com/questions/15644964/python-progress-bar-and-downloads – 2015-03-22 06:35:18