python - tdqm - tqdm imprimiendo a nueva linea
tqdm python (3)
Estoy trabajando en un pequeño juego de línea de comandos en python donde estoy mostrando una barra de progreso usando el módulo tqdm. Escucho la entrada del usuario utilizando el módulo msvcrt para interrumpir el progreso. Una vez interrumpido, el usuario puede reiniciar ingresando ''reiniciar'' en el indicador de línea de comandos. La segunda vez que se muestra la barra de progreso, en lugar de actualizar la misma línea con el progreso, crea una nueva línea cada vez.
¿Cómo lo obtendría para mostrar el progreso en la misma línea?
Este fragmento de código ilustra mi uso de la barra de progreso.
def transfer():
for i in tqdm.tqdm(range(1000), desc="Transfer progress", ncols=100, bar_format=''{l_bar}{bar}|''):
sleep(.1)
if msvcrt.kbhit():
if msvcrt.getwche() == '' '':
interrupt()
break
def interrupt():
type("File transfer interrupted, to restart the transfer, type ''restart''")
Intente usar tqdm.tqdm.write
en lugar de la print()
estándar print()
Esto imprimirá encima de la barra de progreso y moverá la barra de progreso una fila debajo.
Probé esto usando el código de abajo, presionando el space
se imprimirá en stdout pero no interrumpirá el ciclo. No estaba claro al 100% lo que está intentando lograr, ya que la función de interrupt()
de usted solo verifica el tipo de la cadena provista. tipo () función incorporada
import tqdm
import msvcrt
from time import sleep
def transfer():
for i in tqdm.tqdm(range(1000), desc="Transfer progress", ncols=100, bar_format=''{l_bar}{bar}|''):
sleep(.1)
if msvcrt.kbhit():
if msvcrt.getwche() == '' '':
interrupt()
# break
def interrupt():
tqdm.tqdm.write("File transfer interrupted, to restart the transfer, type ''restart''", end="")
transfer()
EDITAR: para incluir el parámetro end
de tqdm.write()
como lo señala Paul Netherwood tqdm.tqdm.write()
Pruebe from tqdm import tqdm_notebook as tqdm
lugar de from tqdm import tqdm
.