В Python, почему что-то не печатается без перевода строки? - PullRequest
13 голосов
/ 07 мая 2011
import time
import sys
sys.stdout.write("1")
time.sleep(5)
print("2")

напечатает «12» через 5 секунд

import time
import sys
sys.stdout.write("1\n")
time.sleep(5)
print("2")

сразу напечатает «1 \ n», а затем «2» через 5 секунд

Почему это?

Ответы [ 6 ]

22 голосов
/ 07 мая 2011

Если вы добавите «\ n», то поток автоматически сбрасывается, и в конце появляется не новая строка.Вы можете сбросить вывод с помощью:

sys.stdout.flush()
7 голосов
/ 07 мая 2011

Потому что stdout буферизуется. Возможно, вы сможете форсировать вывод быстрее с помощью вызова sys.stdout.flush().

4 голосов
/ 07 мая 2011

Команда sys.stdout.write из модуля sys преднамеренно выводит инструкцию без символа \ n. Вот как работает обычный вызов потока stdout, например, в C ++ или C, где символ \ n должен быть добавлен вручную.

Однако команда печати, предоставляемая Python, автоматически добавляет символ \ n в строку, что упрощает код и облегчает его чтение.

Причина, по которой возникает явление в первом результате, состоит в том, что система ожидает сброса для распечатки, которая предоставляется символом \ n. Вы можете избежать этого, используя эту команду sys.stdout.flush(), которая очистит поток stdout, заставляющий его печатать.

4 голосов
/ 07 мая 2011

Это потому, что вывод в Python буферизируется по умолчанию - обычно вы не получите вывод, пока буфер не заполнится или что-то не заставит его очищаться.В этом случае \n был обнаружен и вызвал автоматическую очистку.

См. Этот вопрос, чтобы обойти проблему: Как очистить вывод печати Python?

2 голосов
/ 07 мая 2011

Буферизация .Это на самом деле не Python, а скорее ваша операционная система / терминал.Вывод из любой программы отправляется в буфер , область памяти.Когда вся строка собрана, она отправляется на экран.Обычно есть ловушка, метод с именем что-то вроде flush(), для принудительного вывода частичных строк.

1 голос
/ 07 мая 2011

Учтите, что когда вы вводите команду в компьютер, он не знает , что вы закончили , пока вы не нажмете ENTER

Аналогично, новая строка сообщает Python, что вы завершили, чтолиния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...