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 секунд
Почему это?
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 секунд
Почему это?
Если вы добавите "\n", поток будет автоматически очищен, и он не будет иметь новую строку в конце. Вы можете выполнить сброс с помощью:
sys.stdout.flush()
Потому что stdout
буферизуется. Возможно, вы сможете принудительно выполнить вывод с вызовом sys.stdout.flush()
.
Это потому, что вывод в Python буферизирован по умолчанию - обычно вы не будете получать результат до тех пор, пока буфер не будет заполнен или что-то не приведет к сбросу буфера. В этом случае \n
был обнаружен и вызвал автоматический сброс.
См. этот вопрос для способов устранения проблемы: Как очистить вывод печати Python?
Команда sys.stdout.write из модуля sys целенаправленно выводит инструкцию без символа \n. Вот как работает обычный вызов потока stdout, например, на С++ или C, где\n-символ должен быть добавлен вручную.
Однако команда печати, предоставляемая Python, автоматически добавляет символ \n в строку, поэтому упрощает код и упрощает его чтение.
Причина, по которой явление в первом результате происходит, заключается в том, что система ожидает печати флеша, которая предоставляется символом \n. Вы можете избежать этого, используя эту команду sys.stdout.flush()
, которая будет очищать поток stdout, который заставляет его печатать.
Буферизация. Это не действительно Python, а скорее ваша операционная система/терминал. Выход из любой программы отправляется в буфер, область хранения памяти. Когда собирается целая строка, она отправляется на экран. Обычно используется крючок, метод которого называется flush()
, для принудительного вывода отдельных строк.
Учтите, что когда вы вводите команду в компьютер, она не знает, что вы закончили, пока не нажмете ENTER
Аналогично, новая строка сообщает Python, что вы закончили эту строку.