Проблема сна () Python3 - PullRequest
       16

Проблема сна () Python3

12 голосов
/ 16 декабря 2010

Я писал простую программу на 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 ]

21 голосов
/ 16 декабря 2010

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

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

5 голосов
/ 16 декабря 2010

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

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

...