Проблемы с sys.stdout.write () с time.sleep () в функции

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

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

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.'
5
задан tzot 7 June 2010 в 14:05
поделиться

2 ответа

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

sys.stdout.write('foo')
sys.stdout.flush()
wastetime()
sys.stdout.write('bar')
sys.stdout.flush()
8
ответ дан 13 December 2019 в 05:31
поделиться

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

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

4
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: