2010-05-11 13 views
5

Was ich wollte, ist 5 Punkte drucken, dass ein Punkt pro Sekunde mit time.sleep() gedruckt wurde, aber das Ergebnis war 5 Punkte waren sofort nach 5 Sekunden Verzögerung gedruckt.
Versucht sowohl Druck als auch sys.stdout.write, dasselbe Ergebnis.Probleme mit sys.stdout.write() mit time.sleep() in einer Funktion

Vielen Dank für alle Hinweise.

import time 
import sys 

def wait_for(n): 
    """Wait for {n} seconds. {n} should be an integer greater than 0.""" 
    if not isinstance(n, int): 
     print 'n in wait_for(n) should be an integer.' 
     return 
    elif n < 1: 
     print 'n in wait_for(n) should be greater than 0.' 
     return 
    for i in range(0, n): 
     sys.stdout.write('.') 
     time.sleep(1) 
    sys.stdout.write('\n') 

def main(): 
    wait_for(5) # FIXME: doesn't work as expected 

if __name__ == '__main__': 
    try: 
     main() 
    except KeyboardInterrupt: 
     print '\nAborted.' 

Antwort

8

Sie müssen nach dem Schreiben spülen.

sys.stdout.write('foo') 
sys.stdout.flush() 
wastetime() 
sys.stdout.write('bar') 
sys.stdout.flush() 
+0

Wow, danke für die schnelle Antwort! :-) – philipjkim

4

Sie sollten sys.stderr.write für Fortschrittsbalken verwenden; stderr hat den (nicht zufälligen) Vorteil, nicht gepuffert zu werden, so dass keine sys.stderr.flush Aufrufe benötigt werden.

Siehe auch this antwort.

+0

Danke für die Information! – philipjkim