Ответ 1
Это потому, что вывод буферизуется.
После каждой записи
вы должны добавитьsys.stdout.flush()
Я писал простую программу на 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.
Это потому, что вывод буферизуется.
После каждой записи
вы должны добавитьsys.stdout.flush()
Похоже, разница в том, что stdout автоматически очищается в IDLE. Для эффективности языки программирования часто накапливают кучу вызовов печати перед записью на экран, что является медленным процессом.
Вот еще один вопрос, который требует ответа: Как очистить вывод печати Python?