Mostrar una cuenta atrás para la función de sueño de Python

Estoy usando time.sleep (10) en mi progtwig. ¿Puedo mostrar la cuenta regresiva en el shell cuando ejecuto mi progtwig?

>>>run_my_program() tasks done, now sleeping for 10 seconds 

Y luego quiero que haga 10,9,8,7 ….

¿es posible?

siempre podrías hacer

 #do some stuff print 'tasks done, now sleeping for 10 seconds' for i in xrange(10,0,-1): time.sleep(1) print i 

Este fragmento tiene la característica ligeramente molesta de que cada número se imprime en una nueva línea. Para evitar esto, puedes

 import sys import time for i in xrange(10,0,-1): sys.stdout.write(str(i)+' ') sys.stdout.flush() time.sleep(1) 

Puedes hacer una función de cuenta atrás como:

 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) 

El retorno de carro y la coma mantendrán la impresión en la misma línea (evitando una línea para cada valor de cuenta atrás)

A medida que disminuye el número de segundos, el pad_str asegurará que la última línea se sobrescriba con espacios en lugar de dejar atrás el último carácter (es) a medida que la salida se acorta.

La impresión final sobrescribe el último mensaje de estado con un mensaje terminado e incrementa la línea de salida, por lo que hay evidencia de la demora.

Esta es la mejor manera de mostrar un temporizador en la consola para 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") 

Esto escribe sobre la línea anterior en cada ciclo.

Esto es algo que aprendí en una de mis primeras lecciones de python, jugamos con [“/”, “-“, “|”, “\”, “|”] pero el principio es el mismo:

 import time for i in reversed(range(0, 10)): time.sleep(1) print "%s\r" %i, 

Claro, solo escriba un bucle que imprima 10 menos el contador de iteraciones, luego haga que se duerma 1 segundo cada iteración y corra durante 10 iteraciones. O, para ser aún más 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) 

time.sleep() puede regresar antes si el sueño se interrumpe por una señal o más tarde (depende de la progtwigción de otros procesos / subprocesos por el sistema operativo / el intérprete).

Para mejorar la precisión en múltiples iteraciones, para evitar la deriva de un gran número de iteraciones, la cuenta regresiva puede bloquearse con el reloj:

 #!/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) 

Aquí hay uno que hice:

 import time a = input("How long is the countdown?") while a != 0: print a time.sleep(1) a = a-1 

Al final, si usted y otra persona puede poner una alarma o lo que sea.