Как смоделировать счетчик выполнения в приложении командной строки в Python?
Моя программа Python выполняет ряд операций и выводит некоторые диагностические данные. Я также хотел бы иметь счетчик прогресса следующим образом:
Percentage done: 25%
где число увеличивается «на месте». Если я использую только строковые операторы, я могу писать отдельные числа, но это загромождает экран. Есть ли способ достичь этого, например, используя некоторый escape-символ для backspace, чтобы очистить номер и написать следующий?
благодаря
- -s означает простой английский
- Bash или GoogleCL: новая строка в строковом параметре
- Как не процитировать аргумент в подпроцессе?
- Каков наилучший способ проверить правильность ввода командной строки скрипту в python?
- Как получить доступ к аргументам командной строки в Python?
Вот пример показа процентного прочтения файла:
from sys import * import os import time Size=os.stat(argv[1])[6] #file size f=open(argv[1],"r"); READED_BYTES=0 for line in open(argv[1]): #Read every line from the file READED_BYTES+=len(line) done=str(int((float(READED_BYTES)/Size)*100)) stdout.write(" File read percentage: %s%% %s"%(done,"\r")) stdout.flush(); time.sleep(1)
Бедственное решение:
import time for i in range(10): print "\r", i, time.sleep(1)
Трюк – это заявление печати. Возврат каретки («\ r») возвращает курсор в первый столбец в той же строке, не запустив новую строку. Конечная запятая "," говорит print, чтобы не создавать новую строку.
В зависимости от вашего вывода вы можете запрограммировать оператор печати на конечные пробелы, чтобы фрагменты с более длинными предыдущими строками не мешали вашему текущему типу печати. Его, вероятно, лучше всего собрать строку, которая имеет фиксированную длину для любой информации о ходе.
Посмотрите на панель « Анимированный терминал» в Python от Нади Альрамли
вы можете попробовать посмотреть эту библиотеку, которая в основном делает все для вас:
Вот действительно простой класс Progress Bar, который инкапсулирует большую часть того, что вы хотите сделать с индикатором выполнения CLI (без бара).
class ProgressBar(object): def __init__(self, total=100, stream=sys.stderr): self.total = total self.stream = stream self.last_len = 0 self.curr = 0 def count(self): self.curr += 1 self.print_progress(self.curr) def print_progress(self, value): self.stream.write('\b' * self.last_len) pct = 100 * self.curr / self.total out = '{:.2f}% [{}/{}]'.format(pct, self.curr, self.total) self.last_len = len(out) self.stream.write(out) self.stream.flush()
Например
>>> p = ProgressBar(1000) >>> p.print_progress(500) 50% [500/1000]
- Python: эффективный способ разрезать список с помощью списка индексов
- Отредактируйте редактируемую таблицу, используя шаблоны Flask, Jinja2, затем обработайте полученные данные формы
- Получение вывода команды скрытой консоли?
- Python csv reader: как подключить вывод к другому скрипту с помощью командной строки
- Отправка электронной почты в Python из исполняемого файла
- Сохранять историю команд между (i) сеансами python
- Перенаправить вывод интерактивных команд python / ipython в файлы или переменные
- Как получить «командную строку intellisense» (TAB TAB) для работы с скриптом Python?
- Функция Python в командной строке не работает
- В чем разница между запуском ./file.py и python file.py?
- Выход Piping в Python: несколько каналов для передачи данных и сообщений?