Подтвердить что ты не робот

Как переписать вывод в терминале

У меня есть Python script, и я хочу, чтобы он отображал все большее число от 0 до 100% в терминале. Я знаю, как печатать числа на терминале, но как я могу их переписать, поэтому 0 превращается в 1, 1 в 2 и так далее до 100?

4b9b3361

Ответ 1

Печать возврата каретки (\r) без новой строки сбрасывает курсор в начало строки, делая следующую распечатку, которая уже напечатана:

import time
import sys
for i in range(100):
    print i,
    sys.stdout.flush()
    time.sleep(1)
    print "\r",

Это не очищает строку, поэтому, если вы попытаетесь, скажем, напечатать уменьшающиеся числа, используя эти методы, вы увидите оставшийся текст из предыдущих отпечатков. Вы можете обойти это, заполнив свой вывод пробелами или используя некоторые управляющие коды в других ответах.

Ответ 2

Этот рецепт здесь должен оказаться полезным. Используя этот модуль как tc, следующий код делает то, что вы хотите:

from tc import TerminalController
from time import sleep
import sys

term = TerminalController()

for i in range(10):
    sys.stdout.write("%3d" % i)
    sys.stdout.flush()
    sleep(2)
    sys.stdout.write(term.BOL + term.CLEAR_EOL)

В рецепте используется terminfo, чтобы получить информацию о терминале и работает в Linux и OS X для нескольких терминалов. Однако он не работает в Windows. (Спасибо piquadrat для тестирования, согласно комментарию ниже).

Изменить. Рецепт также предоставляет возможности для использования цветов и переписывания части строки. Он также имеет готовую строку выполнения текста.

Ответ 3

Используя пакет благословений - очистите экран (clear/cls) и введите:

import sys
from blessings import Terminal
from time import sleep # <- boy, does this sound tempting a.t.m.

term = Terminal()
for i in range(6):
    with term.location(term.width - 3, term.height - 3):        
        print('{}'.format(i))
    sleep(2)
    if (i == 3):
        print('what was I doing, again?')
print('done')

Чтобы установить его из CheeseShop, просто...

pip install blessings

Ответ 4

На основе этого ответа, но без контроллера терминала:

import time
import sys
for i in range(100):
    sys.stdout.write("Downloading ... %s%%\r" % (i))
    sys.stdout.flush()
    time.sleep(1)

Протестировано на терминале GNOME (Linux) и консоли Windows.

Совет. Не запускайте этот пример в редакторе IDLE.