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?