Почему time.sleep () происходит одновременно, а не по одному? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь сделать небольшую вещь типа анимации, где она печатает R, затем ждет 0,5 секунды, затем o ждет 0,5 секунды и так далее до конца. Вот код, который я написал:

import time
def rolling():
    print('R', end = '')
    time.sleep(.5)
    print('o', end = '')
    time.sleep(.5)
    print('l', end = '')
    time.sleep(.5)
    print('l', end = '')
    time.sleep(.5)
    print('i', end = '')
    time.sleep(.5)
    print('n', end = '')
    time.sleep(.5)
    print('g', end = '')
    time.sleep(.5)

Когда я запускаю, он ждет 3,5 секунды, а затем печатает все слово. Есть предложения?

1 Ответ

2 голосов
/ 01 мая 2020

Вывод вашей программы буферизуется строкой (как в любом обычном сценарии), поэтому, поскольку вы не печатаете никакой новой строки (\n), результат записывается в консоль только в конце выполнения, все

Чтобы каждый вызов print() немедленно приводил к выводу, вы можете добавить flush=True (спасибо pink spikyhairman за указание на это, я не знал об этой функции на момент написания оригинального ответа):

import time

def rolling():
    print('R', end = '', flush=True)
    time.sleep(.5)
    print('o', end = '', flush=True)
    time.sleep(.5)

Вы можете даже напрямую go с sys.stdout.write() и .flush() вместо:

import time
import sys

def rolling():
    sys.stdout.write('R')
    sys.stdout.flush()
    time.sleep(.5)
    sys.stdout.write('R')
    sys.stdout.flush()
    time.sleep(.5)
    # ...
...