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

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

20
задан tshepang 16 April 2014 в 20:37
поделиться

2 ответа

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

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

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

24
ответ дан 30 November 2019 в 00:27
поделиться

Этот рецепт здесь может оказаться полезным. Используя этот модуль как 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 за тестирование, см. Комментарий ниже).

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

5
ответ дан 30 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: