Мне интересно, как я мог бы создать один из тех изящных счетчиков консоли в Python, как в некоторых программах на C / C ++.
У меня есть цикл, и текущий результат выглядит следующим образом:
Doing thing 0
Doing thing 1
Doing thing 2
...
что было бы аккуратнее, было бы просто обновить последнюю строку;
X things done.
Я видел это в ряде консольных программ, и мне интересно, как бы я сделал это в Python.
print
: stackoverflow.com/a/8436827/1959808curses
это излишество (см. Принятый ответ).Ответы:
Простое решение - просто написать
"\r"
перед строкой, а не добавлять новую строку; если строка никогда не становится короче, этого достаточно ...Немного сложнее индикатор выполнения ... вот что я использую:
Вы вызываете
startProgress
передачу описания операции, затемprogress(x)
гдеx
процент и наконецendProgress()
источник
restic
,flatpak
) могут обновлять несколько строк вывода консоли. Вы случайно не знаете, как этого добиться?Более элегантным решением может быть:
вызовите эту функцию с помощью
value
иendvalue
, результат должен бытьПримечание: версия Python 2.x здесь .
источник
В python 3 вы можете сделать это для печати в той же строке:
print('', end='\r')
Особенно полезно отслеживать последние обновления и прогресс.
Я бы также рекомендовал tqdm здесь , если кто -то хочет видеть прогресс цикла. Он печатает текущую итерацию и общее количество итераций в виде шкалы прогресса с ожидаемым временем завершения. Супер полезно и быстро. Работает на python2 и python3.
источник
Для тех, кто наткнется на это годы спустя (как и я), я немного изменил методы 6502, чтобы индикатор выполнения уменьшался, а также увеличивался. Полезно в чуть большем количестве случаев. Спасибо 6502 за отличный инструмент!
По сути, единственное отличие состоит в том, что вся строка #s и -s записывается каждый раз, когда вызывается progress (x), и курсор всегда возвращается в начало полосы.
источник
Другой ответ может быть лучше, но вот что я делал. Во-первых, я создал функцию под названием progress, которая выводит символ возврата:
Затем я вызвал его в цикле своей основной функции следующим образом:
Это, конечно, сотрет всю строку, но вы можете повозиться с ней, чтобы делать именно то, что хотите. В итоге я сделал индикатор выполнения, используя этот метод.
источник
Если я хорошо понял (не уверен), вы хотите печатать с помощью,
<CR>
а не<LR>
?Если да, то это возможно, если это позволяет консольный терминал (он сломается, когда вывод si перенаправляется в файл).
источник
Я написал это некоторое время назад и очень им доволен. Не стесняйтесь использовать это.
Требуется
index
andtotal
и необязательноtitle
илиbar_length
. После этого заменяет песочные часы галочкой.⏳ Calculating: [████░░░░░░░░░░░░░░░░░░░░░] 18.0% done
✅ Calculating: [█████████████████████████] 100.0% done
Я включил пример, который можно запустить для проверки.
У меня также есть версия с отзывчивым индикатором выполнения в зависимости от ширины терминала,
shutil.get_terminal_size()
если это интересно.источник
Это можно сделать без использования библиотеки sys, если мы посмотрим на
print()
функциюВот мой код:
источник
На примере Aravind Voggu добавлено немного больше функциональности :
Теперь вы можете создавать несколько индикаторов выполнения, не заменяя предыдущий.
Я также добавил
name
значение фиксированной ширины.источник
Код ниже будет считать сообщение от 0 до 137 каждые 0,3 секунды, заменяя предыдущее число.
Количество символов, выводимых за кулисы = количество цифр.
источник