Je suis nouveau sur python) et j'écris des scripts pour automatiser le téléchargement de fichiers à partir de serveurs FTP, etc. Je souhaite afficher la progression du téléchargement, mais je souhaite qu'il reste dans la même position, tel que:
sortie:
Téléchargement du fichier FooFile.txt [47%]
J'essaie d'éviter quelque chose comme ça:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
Comment devrais-je m'y prendre?
Dupliquer : Comment puis-je imprimer sur la ligne en cours dans une application de ligne de commande?
Vous pouvez également utiliser le retour chariot:
sys.stdout.write("Download progress: %d%% \r" % (progress) )
sys.stdout.flush()
Utilisez une bibliothèque de traitement de terminal telle que module curses :
Le module curses fournit une interface à la bibliothèque curses, la norme de facto pour la gestion avancée des terminaux portables.
J'aime ce qui suit:
print 'Downloading File FooFile.txt [%d%%]\r'%i,
Démo:
import time
for i in range(100):
time.sleep(0.1)
print 'Downloading File FooFile.txt [%d%%]\r'%i,
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
Démo:
import time
for i in range(100):
time.sleep(0.1)
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")
Imprimer le caractère de retour arrière \b
plusieurs fois, puis écrasez l'ancien numéro avec le nouveau.
#kinda like the one above but better :P
from __future__ import print_function
from time import sleep
for i in range(101):
str1="Downloading File FooFile.txt [{}%]".format(i)
back="\b"*len(str1)
print(str1, end="")
sleep(0.1)
print(back, end="")
Pour Python 3xx:
import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... {}".format(i)+str(i), end="")
Une solution intéressante qui a fonctionné pour moi est la suivante:
from __future__ import print_function
import sys
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r')
sys.stdout.flush()
print("")
Le sys.stdout.flush
Est important sinon il devient vraiment maladroit et la sortie de boucle print("")
on est également importante.
UPDATE : Comme mentionné dans les commentaires, print
possède également un argument flush
. Donc, ce qui suit fonctionnera également:
from __future__ import print_function
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='\r', flush=True)
print("")
x="A Sting {}"
for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")
for j in range(0,len(y)):
print("\b",end="")