Je suis nouveau sur python et j'écris des scripts pour automatiser le téléchargement de fichiers à partir de serveurs FTP, etc. Je veux montrer la progression du téléchargement, mais je veux qu'il reste dans la même position, comme:
production:
Téléchargement du fichier FooFile.txt [47%]
J'essaye d'éviter quelque chose comme ça:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
Comment dois-je procéder?
Dupliquer : Comment puis-je imprimer sur la ligne actuelle dans une application de ligne de commande?
python
console-output
Scottm
la source
la source
Réponses:
Vous pouvez également utiliser le retour chariot:
la source
\r
au début de la ligne et ajouter un\x1b[K
pour effacer le texte précédent.print("sample text", end='\r", flush=True)
Python 2
J'aime ce qui suit:
Démo:
Python 3
Démo:
Console de débogage PyCharm avec Python 3
la source
Utilisez une bibliothèque de gestion de terminaux comme le module curses :
la source
Imprimez
\b
plusieurs fois le caractère de retour arrière , puis remplacez l'ancien numéro par le nouveau.la source
print 'Downloading.... \r'
) n'efface pas non plus les données précédentes, mais évite d'avoir à savoir jusqu'où sauvegarder.la source
Pour Python 3xx:
la source
Une solution intéressante qui a fonctionné pour moi est:
Le
sys.stdout.flush
est important sinon il devient vraiment maladroit et laprint("")
sortie de la boucle on for est également importante.MISE À JOUR : Comme mentionné dans les commentaires, a
print
également unflush
argument. Donc, ce qui suit fonctionnera également:la source
flush=True
toprint
, donc il n'y a pas besoin d'unsys.stdout.flush()
appel supplémentaire .la source