Почему не sys.stdout.флеш() печать всех символов в одной строке?

#python #python-3.x #time #flush #sys

Вопрос:

Вот мой код:

 wait = "..."
for char in wait:
   sys.stdout.flush()
   time.sleep(1)
   print(char)
 

Я пытаюсь довести это до конца:

 ...
 

Но вместо этого он выводит:

 .
.
.
 

Я не понимаю, почему sys.stdout.смыв не оказывает никакого эффекта.

Ответ №1:

Если вы введете help(print) интерпретатор Python, вы получите:

 print(value, ..., sep=' ', end='n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
 

Использование этой информации:

 for char in wait:
   time.sleep(1)
   print(char, end='', flush=True)
 

Ответ №2:

std.out.flush() просто записывает то, что находится в буфере, на экран

По умолчанию print() добавляет a n в конец, чтобы написать новую строку. Вы можете отключить его, выполнив print(s, end='')

Ответ №3:

Используя параметр end='' в print , вы можете достичь желаемых результатов:
Попробуйте это:

 import sys
import time
wait = "..."
for char in wait:
   sys.stdout.flush()
   time.sleep(1)
   print(char, end='')
 

Вы можете прочитать больше об этом end параметре здесь

Ответ №4:

Попробовать это:

 import sys
import time

wait = "..."
for char in wait:
    time.sleep(1)
    print(char, end="", file=sys.stdout, flush=True)