Подтвердить что ты не робот

В Python почему-то не печатается без новой строки?

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 секунд

Почему это?

4b9b3361

Ответ 1

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

sys.stdout.flush()

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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