J'utilise time.sleep (10) dans mon programme. Puis-je afficher le compte à rebours dans le shell lorsque j'exécute mon programme?
>>>run_my_program()
tasks done, now sleeping for 10 seconds
et puis je veux qu'il fasse 10,9,8,7 ....
est-ce possible?
tu pourrais toujours faire
#do some stuff
print 'tasks done, now sleeping for 10 seconds'
for i in xrange(10,0,-1):
time.sleep(1)
print i
Cet extrait a la caractéristique légèrement ennuyeuse que chaque numéro soit imprimé sur une nouvelle ligne. Pour éviter cela, vous pouvez
import sys
import time
for i in xrange(10,0,-1):
sys.stdout.write(str(i)+' ')
sys.stdout.flush()
time.sleep(1)
Vous pouvez faire une fonction de compte à rebours comme:
import sys
import time
def countdown(t, step=1, msg='sleeping'): # in seconds
pad_str = ' ' * len('%d' % step)
for i in range(t, 0, -step):
print '%s for the next %d seconds %s\r' % (msg, i, pad_str),
sys.stdout.flush()
time.sleep(step)
print 'Done %s for %d seconds! %s' % (msg, t, pad_str)
Le retour chariot \r
et la virgule ,
conservera l'impression sur la même ligne (en évitant une ligne pour chaque compte à rebours)
À mesure que le nombre de secondes diminue, pad_str s'assurera que la dernière ligne est remplacée par des espaces au lieu de laisser le ou les derniers caractères derrière pendant que la sortie se raccourcit.
L'impression finale remplace le dernier message d'état par un message terminé et incrémente la ligne de sortie, il y a donc une preuve du retard.
C'est le meilleur moyen d'afficher une minuterie dans la console pour Python 3.x:
import time
import sys
for remaining in range(10, 0, -1):
sys.stdout.write("\r")
sys.stdout.write("{:2d} seconds remaining.".format(remaining))
sys.stdout.flush()
time.sleep(1)
sys.stdout.write("\rComplete! \n")
Cela écrase la ligne précédente à chaque cycle.
C'est quelque chose que j'ai appris lors d'une de mes premières python leçons, nous avons joué avec ["/", "-", "|", "\", "|"] mais Le principe est le même:
import time
for i in reversed(range(0, 10)):
time.sleep(1)
print "%s\r" %i,
En voici un que j'ai fait:
import time
a = input("How long is the countdown?")
while a != 0:
print a
time.sleep(1)
a = a-1
À la fin, si vous et un autre, vous pouvez mettre une alarme ou autre chose.
time.sleep()
peut revenir plus tôt si le sommeil est interrompu par un signal ou plus tard (dépend de la programmation d'autres processus/threads par OS/l'interpréteur).
Pour améliorer la précision sur plusieurs itérations, pour éviter la dérive pour un grand nombre d'itérations, le compte à rebours peut être verrouillé avec l'horloge:
#!/usr/bin/env python
import sys
import time
for i in reversed(range(1, 1001)):
time.sleep(1 - time.time() % 1) # sleep until a whole second boundary
sys.stderr.write('\r%4d' % i)
Bien sûr, il suffit d'écrire une boucle qui imprime 10 moins le compteur d'itérations, puis de la laisser dormir 1 seconde à chaque itération et de l'exécuter pendant 10 itérations. Ou, pour être encore plus flexible:
def printer(v):
print v
def countdown_timer(duration, step=1, output_function=printer,
Prompt='Waiting {duration} seconds.'):
output_function(Prompt.format(duration=duration))
for i in xrange(duration/step):
output_function(duration - step * i)