Tôi đang viết một ứng dụng nhỏ để tải xuống các tệp qua http (ví dụ: được mô tả here).Làm cách nào để viết chỉ báo tiến trình tải xuống bằng Python?
Tôi cũng muốn bao gồm một chút chỉ số tải về tiến trình thể hiện tỷ lệ tiến trình download.
Dưới đây là những gì tôi đã đưa ra:
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%
Bất kỳ ý tưởng hoặc đề nghị để làm điều này khác?
Một điều đó là hơi khó chịu là con trỏ nhấp nháy trong nhà ga trên chữ số đầu tiên của phần trăm. Có cách nào để ngăn chặn điều này? Có cách nào để ẩn con trỏ không?
EDIT:
Dưới đây là một lựa chọn tốt hơn sử dụng một biến toàn cầu cho tên tập tin trong dlProgress và '\ r' mã:
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%
Và con trỏ hiển thị ở cuối dòng. Tốt hơn nhiều.
'rem_file' toàn cầu làm cho tinh thần chỉ bên trong một hàm mà bạn liên kết nó với một đối tượng mới 'rem_file = ...' nếu không (nếu bạn chỉ đọc giá trị của nó) 'global rem_file' là không cần thiết. – jfs
Bạn cũng có thể thực hiện a/r + flush() theo tiêu chuẩn. Tôi chỉ đoán đây là chạy trong cửa sổ dựa trên hành vi thiết bị đầu cuối bạn đề cập đến. – meawoppl
http://stackoverflow.com/questions/15644964/python-progress-bar-and-downloads –