Estoy escribiendo una pequeña aplicación para descargar archivos a través de http (como, por ejemplo, se describe here).¿Cómo escribir un indicador de progreso de descarga en Python?
También quiero incluir un pequeño indicador de progreso de descarga que muestra el porcentaje del progreso de la descarga.
Esto es lo que ocurrió:
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()
Salida: MyFileName ... 9%
Cualquier otra idea o recomendaciones para hacer esto?
Una cosa que es un poco molesto es el cursor parpadeante en el terminal en el primer dígito del porcentaje. ¿Hay alguna forma de prevenir esto? ¿Hay alguna manera de ocultar el cursor?
EDIT:
Aquí una mejor alternativa que utiliza una variable global para el nombre de archivo en dlProgress y el código '\ 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()
Salida: MyFileName ... 9%
Y el cursor aparece al FINAL de la línea. Mucho mejor.
'rem_file' mundial tiene sentido solo dentro de una función donde lo vincula a un nuevo objeto 'rem_file = ...' de lo contrario (si solo lee su valor) 'global rem_file' no es necesario. – jfs
También puede hacer un/r + flush() en salida estándar. Solo estoy adivinando que esto se está ejecutando en Windows según el comportamiento del terminal que mencionas. – meawoppl
relacionado http://stackoverflow.com/questions/15644964/python-progress-bar-and-downloads –