Как обновить Консоль в той же строке в реальном времени, Python - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь обновить текст, чтобы отображать некоторую информацию в одной строке, переписывая старый текст.

Пример кода:

from time import sleep

def countdown(n):
    if n > 0 :
        print(n)
        sleep(0.3)
        countdown(n-1)
    else :
        print("Blastoff!")
countdown(3)

Если яиспользуйте "\ r" в операторе печати, это делает \ n два раза.

Я пробовал возврат каретки "\ r" и функцию cls clear (), все в стеке, но для Mac ничего не работает.

пример кода:

from time import sleep

def countdown(n):
    if n > 0 :
        print(n)
        sleep(0.3)
        countdown(n-1)
    else :
        print("Blastoff!")
countdown(6)

Если я использую «\ r» в операторе печати, он делает \ n два раза.это текущий вывод: 3 2 1 Blastoff!

в том же окне.

Я хотел бы получить вывод следующим образом: 3 # в первой строке

2 # в том же месте, где было 3 ... и так далее.,,Взлетать!# в конце будет единственным на экране.

1 Ответ

0 голосов
/ 01 января 2019

По умолчанию оператор print добавляет новую строку в конце вашего вывода.Чтобы предотвратить это, вы хотите добавить end="" в качестве параметра.Теперь ваш вывод всегда будет в одной строке.В дополнение к этому вы хотите использовать "\r" в начале вашего вывода.

Если вы добавите "\r" в конце вывода, некоторые консоли могут перезаписать ваш вывод при выполнении возврата каретки, и выбудет заканчиваться пустой строкой.

Я бы также не стал использовать здесь рекурсию, итерация обычно является более быстрым способом, и если он не усложнит ваш код, я - лично - предпочел бы его.

def countdown(n):
    while 0 < n:
        # add some spaces after the number to make sure we overwrite the entire last output
        print("\r%d   " % n, end="")
        n -= 1
        sleep(0.3)
    print("\rBlastoff!")

Редактировать

Взяты отсюда: Перезаписать напечатанную строку в python 3.x на mac

Заменить print(...) на sys.stdout.write(...), а также

def countdown(n):
    while 0 < n:
        sys.stdout.write("\r%d   " % n)
        sys.stdout.flush()
        n -= 1
        sleep(0.3)
    sys.stdout.write("\rBlastoff!")
    sys.stdout.flush()

Вам также понадобится import sys

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...