Pieter Helsen
Estoy trabajando en un pequeño juego de línea de comandos en python donde muestro una barra de progreso usando el módulo tqdm. Escucho la entrada del usuario usando el módulo msvcrt para interrumpir el progreso. Una vez interrumpido, el usuario puede reiniciar ingresando ‘reiniciar’ en el indicador de línea de comando. 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 haría para que muestre 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'")
SciPy
Prueba con position=0
y leave=True
(Solución trabajando en Colaboración de Google para evitar imprimir en una nueva línea)
from tqdm import tqdm
import time
def foo_():
time.sleep(0.3)
range_ = range(0, 10)
total = len(range_)
with tqdm(total=total, position=0, leave=True) as pbar:
for i in tqdm((foo_, range_ ), position=0, leave=True):
pbar.update()
-
Si haces una celda colab con
from functools import partial
,from tqdm import tqdm
,tqdm = partial(tqdm, position=0, leave=True)
en la parte superior de su computadora portátil, esto lo configurará para que pueda llamartqdm(iterable)
y funcionará muy bien en colab.– Roberto Bracco
27 de julio de 2020 a las 15:13
-
for i in tqdm(range(n), position=0, leave=True)
también me funciona en PyCharm– Blupon
1 oct 2021 a las 13:37
-
Esto también funciona tanto en jupyterlab como en terminal.
– LI Xuhong
20 oct 2021 a las 6:43
-
en lugar de tqdm.tqdm. Usar tqdm.auto.tqdm
– Vivasvan Patel
7 de noviembre de 2021 a las 14:01
-
¿Funcionará esto si un paquete usa tqdm internamente? Supongo que no, ya que el paquete tendría su propio
from tqdm import tqdm
declaración o similar.– Libra esterlina
20 de junio a las 18:58
laurent grenier
tqdm_cuaderno es obsoleto. Debes usar tq.notebook.tqdm en cambio.
import tqdm.notebook as tq
for i in tq.tqdm(...):
Además, tqdm_notebook fue realmente miserable en términos de rendimiento. Eso está completamente corregido con la nueva biblioteca.
-
Esto no muestra ninguna barra de progreso en una sesión de jupyter Lab
– 00__00__00
15 de octubre de 2020 a las 12:07
-
¿Cómo trabajaste con
asyncio
sintqdm.asyncio
?– Joe Huang
12 de julio de 2021 a las 7:36
-
@00__00__00 necesitarías instalar/actualizar ipywidgeds y activarlo Widgets
bash pip install ipywidgets jupyter nbextension enable --py widgetsnbextension
s– Señor Mushn
14 de junio a las 16:55
jose vicente
Me di cuenta de que cerrar las instancias de tqdm antes de volver a usar tqdm soluciona el problema de imprimir la barra de estado en una nueva línea en Jupyter Lab:
while len(tqdm._instances) > 0:
tqdm._instances.pop().close()
O mejor aún, gracias a Nirmal por la sugerencia:
tqdm._instances.clear()
-
Maldita sea, todo este tiempo he estado reiniciando portátiles Jupyter para arreglar las cosas de varias líneas. Esto es realmente útil, ¡gracias!
– Jay Mody
26 de mayo de 2020 a las 4:04
-
esto lo soluciono!
– Vaaal88
2 feb a las 13:41
RAHUL TIWARI
Me enfrenté mucho a este problema y, a veces, position = 0
& leave = True
no funciona. Entonces, encontré una forma alternativa.
En vez de tqdm.tqdm puedes usar tqdm.auto.tqdm
o
en vez de
from tqdm import tqdm
intenta usar
from tqdm.auto import tqdm
from tqdm import tqdm_notebook
este comando funciona en google colab.
Intenta usar tqdm.tqdm.write
en lugar de la norma print()
Esto imprimirá encima de la barra de progreso y moverá la barra de progreso una fila hacia abajo.
Probé esto usando el siguiente código, presionando space
imprimirá en stdout pero no romperá el ciclo. No estaba 100% claro lo que está tratando de lograr, ya que el interrupt()
La función suya solo verifica el tipo de la cadena proporcionada. función incorporada tipo ()
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 end
parámetro de tqdm.write()
como señaló Paul Netherwood
tqdm.tqdm.escribir()
Hamman Samuel
from tqdm import notebook
En vez de tqdm(looping)
Usar notebook.tqdm(looping)
github.com/tqdm/tqdm/issues/375
– sirex
7 abr 2018 a las 18:37
github.com/tqdm/tqdm/issues/313
– usuario
5 mayo 2019 a las 21:53
¿Hay algún lugar que explique POR QUÉ sucede esto?
–Eduardo Reyes
18 de febrero de 2021 a las 18:32