python - guia - ¿Cómo escribo la salida en el mismo lugar en la consola?
qgis español (8)
Imprima el carácter de retroceso /b
varias veces, y luego sobrescriba el número anterior con el nuevo número.
Soy nuevo en Python y estoy escribiendo algunos scripts para automatizar la descarga de archivos desde servidores FTP, etc. Quiero mostrar el progreso de la descarga, pero quiero que se mantenga en la misma posición, como por ejemplo:
salida:
Descargando el archivo FooFile.txt [47%]
Estoy tratando de evitar algo como esto:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
¿Cómo debo hacer esto?
Duplicado : ¿Cómo puedo imprimir sobre la línea actual en una aplicación de línea de comando?
Me gusta lo siguiente:
print ''Downloading File FooFile.txt [%d%%]/r''%i,
Manifestación:
import time
for i in range(100):
time.sleep(0.1)
print ''Downloading File FooFile.txt [%d%%]/r''%i,
Para Python 3xx:
import time
for i in range(10):
time.sleep(0.2)
print ("/r Loading... ".format(i)+str(i), end="")
También puede usar el retorno de carro:
sys.stdout.write("Download progress: %d%% /r" % (progress) )
sys.stdout.flush()
Una buena solución que me ha estado funcionando es:
from __future__ import print_function
import sys
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end=''/r'')
sys.stdout.flush()
print("")
El sys.stdout.flush
es importante, de lo contrario se sys.stdout.flush
realmente torpe y la print("")
sys.stdout.flush
para la salida del bucle también es importante.
ACTUALIZACIÓN : como se menciona en los comentarios, print
también tiene un argumento de flush
. Entonces, lo siguiente también funcionará:
from __future__ import print_function
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end=''/r'', flush=True)
print("")
Use una biblioteca de manejo de terminal como el módulo curses :
El módulo de curses proporciona una interfaz para la biblioteca de curses, el estándar de facto para el manejo portátil avanzado de terminales.
#kinda like the one above but better :P
from __future__ import print_function
from time import sleep
for i in range(101):
str1="Downloading File FooFile.txt [{}%]".format(i)
back="/b"*len(str1)
print(str1, end="")
sleep(0.1)
print(back, end="")
x="A Sting {}"
for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")
for j in range(0,len(y)):
print("/b",end="")