web-dev-qa-db-fra.com

impression tqdm sur newline

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? 

 Progress bar issue

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'")
16
Pieter Helsen

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 ()

1
reportgunner