Je travaille sur un petit jeu de ligne de commande en python dans lequel je montre une barre de progression à l'aide du module tqdm. J'écoute les entrées de l'utilisateur à l'aide du module msvcrt pour interrompre la progression. Une fois interrompu, l'utilisateur peut redémarrer en entrant «redémarrer» dans l'invite de la ligne de commande. La deuxième fois que la barre de progression est affichée, au lieu de mettre à jour la même ligne avec la progression, elle crée une nouvelle ligne à chaque fois.
Comment pourrais-je l'obtenir pour montrer les progrès sur la même ligne?
Cet extrait de code illustre mon utilisation de la barre de progression.
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'")
Essayez d’utiliser tqdm.tqdm.write
à la place du print()
standard.
Cela imprimera au-dessus de la barre de progression et déplacera la barre de progression d'une ligne en dessous.
J'ai testé ceci en utilisant le code ci-dessous, en appuyant sur space
, vous imprimerez sur stdout sans casser la boucle. Ce que vous essayez d’obtenir n’est pas clair à 100%, car la fonction interrupt()
vérifie uniquement le type de celui fourni. chaîne. type () fonction intégrée
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()
EDIT: pour inclure le paramètre end
de tqdm.write()
comme indiqué par Paul Netherwood tqdm.tqdm.write ()