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, что вы закончили эту строку.