2010-05-11 15 views
2

Quand je lance, par exemple:problèmes avec time.sleep

print("[",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("=",end=" ") 
time.sleep(1) 
print("]",end=" ") 

Rien ne se passe pendant 10 secondes, puis l'ensemble [= = = = = = = = = =] apparaît. Comment puis-je empêcher cela afin qu'il puisse agir comme une sorte de barre de progression?

+7

oww, c'est méchant. Qu'en est-il des boucles? Ils n'ont jamais rien fait de mal pour mériter une telle ignorance flagrante! Avoir un coeur, mec! – LukeN

+0

duplication possible de [Problèmes avec sys.stdout.write() avec time.sleep() dans une fonction] (http://stackoverflow.com/questions/2808832/problems-with-sys-stdout-write-with-time -sleep-in-a-function) – tzot

Répondre

3

En fait, une barre de progression appartient à sys.stderr, qui est (très pratique et non par pure coïncidence du tout) non tamponné. Donc, je vous suggère:

print("=", end=" ", file=sys.stderr) 

à la place.

PS un synopsis des flux d'entrée, de sortie et d'erreur standard dans les systèmes d'exploitation conformes POSIX peut être trouvé dans Wikipedia: Standard streams. En quelques mots: stdin est l'entrée d'un processus; stdout est la sortie utile d'un processus, les résultats; stderr est pour les avertissements, les erreurs et les sorties hors bande (par exemple les barres de progression).

+0

Qu'est-ce que cela ferait? Je ne comprends pas, je suis juste un débutant. Est-ce que ça sortirait toujours dans la coquille? – Kudu

+0

@Waterfox: oui, il sortirait toujours sur le "terminal". Allez-y et essayez-le. – tzot

+0

Je ne comprends pas, quelle est la différence? – Kudu

0

Vous devez rincer à l'aide stdoutsys.stdout.flush() chaque fois que vous voulez écrire les mises à jour.

5

Essayez rinçage stdout après chaque impression:

import sys 

print("=",end=" ") 
sys.stdout.flush()