Python3 sleep() проблема

Я писал простую программу на Python 3.1 и наткнулся на это:

Если я запускаю это на IDLE, оно работает как положено - печатает "Initializing." а затем добавляет две точки, по одной после каждой секунды, и ожидает ввода.

from time import sleep

def initialize():
    print('Initializing.', end='')
    sleep(1)
    print(" .", end='')
    sleep(1)
    print(" .", end='')
    input()

initialize()

Проблема в том, что когда я дважды щелкаю на.py, чтобы запустить файл, он запускается на python.exe вместо pythonw.exe, и происходят странные вещи: он объединяет все sleep() время, т.е. заставляет меня ждать 2 секунды, а затем печатает всю строку Initializing. . . однажды. Почему это происходит? Есть ли способ избежать этого в терминале? Это прекрасно работает, если я использую IDLE в Windows и Linux.

2 ответа

Решение

Это потому, что вывод буферизуется.

Вы должны добавить sys.stdout.flush() после каждой записи

Похоже, разница в том, что stdout автоматически сбрасывается в IDLE. Для эффективности языки программирования часто экономят кучу вызовов печати перед записью на экран, что является медленным процессом.

Вот еще один вопрос, ответ на который вам нужен: как очистить вывод печати Python?

Другие вопросы по тегам