Проблема с 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 в обоих окнах и Linux.

Ответ 1

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

После каждой записи

вы должны добавить sys.stdout.flush()

Ответ 2

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

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