У меня есть скрипт Python, и я хочу, чтобы он отображал увеличивающееся число от 0 до 100% в терминале. Я знаю, как печатать числа на терминале, но как я могу «переписать» их так, чтобы 0 превращался в 1, 1 в 2 и так далее до 100?
Печать возврата каретки ( \ r
) без новой строки сбрасывает курсор в начало строки, в результате чего следующая печать перезаписывает уже напечатанное:
import time
import sys
for i in range(100):
print i,
sys.stdout.flush()
time.sleep(1)
print "\r",
Это не очищает строку, поэтому, если вы попытаетесь, скажем, напечатать убывающие числа с помощью этого метода, вы увидите текст, оставшийся от предыдущих распечаток. Вы можете обойти это, дополнив свой вывод пробелами или используя некоторые управляющие коды в других ответах.
Этот рецепт здесь может оказаться полезным. Используя этот модуль как 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 за тестирование, см. Комментарий ниже).
Редактировать : рецепт также дает возможность использовать цвета и переписывать часть строки. Он также имеет готовый текстовый индикатор выполнения.