2010-05-11 15 views
5

Chciałem wydrukować 5 kropek, które kropka była drukowana na sekundę za pomocą metody time.sleep(), ale wynik był 5 kropek drukowane natychmiast po 5 sekundach opóźnienia.
Próbowano zarówno drukowania, jak i sys.stdout.write, tego samego wyniku.Problemy z sys.stdout.write() z time.sleep() w funkcji

Dzięki za porady.

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.' 

Odpowiedz

8

Musisz spłukać po napisaniu.

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

Wow, dzięki za szybką reakcję! :-) – philipjkim

4

Powinieneś użyć sys.stderr.write dla pasków postępu; stderr ma (zupełnie przypadkowo) zaletę, że nie jest buforowany, więc nie są potrzebne żadne połączenia.

Zobacz także odpowiedź this.

+0

Dzięki za informację! – philipjkim