2010-05-11 2 views
5

То, что я хотел, это распечатать 5 точек, которые печатают точками в секунду с использованием time.sleep(), но результатом было 5 точек распечатывается сразу после задержки 5 секунд.
Пробовал и печать и sys.stdout.write, такой же результат.Проблемы с sys.stdout.write() с функцией time.sleep() в функции

Спасибо за любые советы.

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

ответ

8

Необходимо выполнить промывку после записи.

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

Ничего себе, спасибо за быстрый ответ! :-) – philipjkim

4

Вы должны использовать sys.stderr.write для индикаторов хода; stderr имеет (не совсем совпадающее) преимущество не буферизации, поэтому нет необходимости звонить sys.stderr.flush.

См. Также this ответ.

+0

Спасибо за информацию! – philipjkim