2013-06-20 5 views
7

Ich benutze time.sleep (10) in meinem Programm. Kann ich den Countdown in der Shell anzeigen, wenn ich mein Programm starte?Zeigen Sie einen Countdown für die Python-Schlaf-Funktion

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

und dann habe ich es 10,9,8,7 ....

ist dies möglich machen wollen?

+0

Vielen Dank für die wunderbaren Antworten. – user1681664

+0

verwandt: [Countdown mit Tkinter, oder Gtk oder Twisted oder Asyncio Event-Schleifen] (http://StackOverflow.com/A/14040516/4279) – jfs

Antwort

16

konnte man immer

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

tun Dieser Code-Schnipsel hat das etwas ärgerlich Funktion, die jede Zahl auf eine neue Zeile ausgedruckt wird. Um dies zu vermeiden, können Sie

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

Danke, das ist großartig. Du hast nur einen kleinen Fehler den ich behoben habe. Zeit.Schlaf (i) sollte sein time.sleep (1) – user1681664

+1

Ja, in der Tat ist es für die Antwort behoben. – aestrivex

1

Sicher, schreiben Sie einfach eine Schleife, die 10 druckt abzüglich der Wiederholungszähler, dann haben sie schlafen 1 Sekunde bei jeder Iteration und führen Sie für 10 Wiederholungen. Oder, um noch flexibler:

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) 
7

Sie können eine Countdown-Funktion tun:

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) 

Der Wagenrücklauf \r und das Komma , den Druck in der gleichen Linie halten (Vermeidung eine Zeile für jeden Countdown-Wert)

Wenn die Anzahl der Sekunden abnimmt, stellt pad_str sicher, dass die letzte Zeile mit Leerzeichen überschrieben wird, anstatt die letzten Zeichen zurückzulassen, wenn der Ausgang kürzer wird.

Der letzte Druck überschreibt die letzte Statusmeldung mit einer Fertigmeldung und inkrementiert die Ausgabezeile, so dass die Verzögerung angezeigt wird.

1

Hier ist ein ich tat:

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

Am Ende, wenn Sie und ein sonst können Sie einen Alarm setzen oder was auch immer.

1

time.sleep() möglicherweise früher zurück, wenn der Schlaf durch ein Signal oder später unterbrochen wird (abhängig von der Planung anderer Prozesse/Threads von OS/dem Interpreter).

Um die Genauigkeit über mehrere Iterationen, die Verbesserung der Drift für große Anzahl von Wiederholungen zu vermeiden, wird der Countdown kann mit der Uhr gesperrt

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

das ist genauer schlafen, danke – wukong

1

Das ist etwas, das ich bei einem meines ersten Python gelernt habe Unterricht, spielten wir mit [ "/", "-", "|", "\", "|"], aber das Prinzip ist das gleiche:

import time 

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

Dies ist der beste Weg, um einen Timer angezeigt wird in die Konsole für 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") 

Dies schreibt die vorherige Zeile in jedem Zyklus.

Verwandte Themen