Для реализации строки состояния, как показано ниже:
[========== ] 45%
[================ ] 60%
[==========================] 100%
Я хочу, чтобы это распечатывалось на стандартный вывод и продолжало обновлять его, а не печатать на другую строку. Как это сделать?
Ответы:
Там есть модуль Python , который вы можете получить от PyPI называется
progressbar
, реализующий такой функциональности. Если вы не против добавления зависимости, это хорошее решение. В противном случае, перейдите с одним из других ответов.Простой пример того, как его использовать:
Чтобы установить его, вы можете использовать
easy_install progressbar
, или,pip install progressbar
если вы предпочитаете pip.источник
bar.start()
?bar.start()
sudo -H pip install progressbar2
.Символ
'\r'
(возврат каретки) сбрасывает курсор в начало строки и позволяет вам писать поверх того, что было ранее в строке.Я не уверен на 100%, является ли это полностью переносимым во всех системах, но, по крайней мере, работает на Linux и OSX.
источник
n=21
заменитьrange(21)
сrange(n)
, а затем добавитьj = (i + 1) / n
в цикл, и заменитеwrite
инструкцию с небольшим изменением:sys.stdout.write("[%-20s] %d%%" % ('='*int(20*j), 100*j))
. Теперь единственное изменение, которое вам нужно сделать - этоn=21
перед циклом (более вероятноn=len(iterable)
), а затем перечислить итеративный объект. Я рекомендовал это изменение, но оно было отклонено; по-видимому, функциональность «отклоняется от первоначальной цели поста».sys.stdout.write("[{:{}}] {:.1f}%".format("="*i, n-1, (100/(n-1)*i)))
, только для Python 3Я нашел полезную библиотеку tqdm ( https://github.com/tqdm/tqdm/ , ранее: https://github.com/noamraph/tqdm ). Он автоматически оценивает время завершения и может быть использован в качестве итератора.
Использование:
Результаты в:
tqdm
может обернуть любой повторяемый.источник
Вы можете использовать
\r
( возврат каретки ). Демо - версия:источник
total
как10
, тогда вы получите сообщение об ошибкеZeroDivisionError: long division or modulo by zero
Здесь вы можете использовать следующий код в качестве функции:
С использованием .format:
источник
] percent * 100 %
Основываясь на вышеупомянутых ответах и других подобных вопросах о индикаторе выполнения CLI, я думаю, что получил общий общий ответ на все из них. Проверьте это на https://stackoverflow.com/a/15860757/2254146
Вот копия функции, но измененная в соответствии с вашим стилем:
Выглядит как
Процент: [====================] 99,0%
источник
Если вы разрабатываете интерфейс командной строки, я предлагаю вам взглянуть на
click
что очень приятно:Вот результат, который вы получите:
источник
Дальнейшее улучшение, используя функцию как:
пример вызова:
вывод:
источник
Я наткнулся на эту тему сегодня и после того, как опробовал это решение от Марка Рушакова
Я могу сказать, что это хорошо работает на W7-64 с Python 3.4.3 64-битной, но только в родной консоли. Однако при использовании встроенной консоли spyder 3.0.0dev разрывы строк по-прежнему / снова присутствуют. Поскольку мне потребовалось некоторое время, чтобы понять, я хотел бы сообщить об этом наблюдении здесь.
источник
Основываясь на некоторых ответах здесь и в других местах, я написал эту простую функцию, которая отображает индикатор выполнения и истекшее / приблизительное оставшееся время. Должен работать на большинстве машин на основе Unix.
источник
Это довольно простой подход, который можно использовать с любым циклом.
источник
Проще всего еще
Ключ должен преобразовать целочисленный тип в строку.
источник
Как описано в решении Марка Рушакова , вы можете вывести символ возврата каретки,
sys.stdout.write('\r')
чтобы сбросить курсор на начало строки. Чтобы обобщить это решение, а также реализовать f-строки Python 3 , вы можете использоватьисточник
Попробуйте PyProg. PyProg - это библиотека с открытым исходным кодом для Python, позволяющая создавать супер настраиваемые индикаторы и индикаторы выполнения.
Это в настоящее время в версии 1.0.2; он размещен на Github и доступен на PyPI (ссылки внизу). Он совместим с Python 3 и 2, а также может использоваться с Qt Console.
Это действительно легко использовать. Следующий код:
будет производить именно то, что вы хотите (даже длина бара!):
Чтобы узнать больше о настройке индикатора выполнения, перейдите на страницу Github на этом сайте.
Я на самом деле сделал PyProg, потому что мне нужна простая, но супер настраиваемая библиотека индикатора выполнения. Вы можете легко установить с помощью :
pip install pyprog
.PyProg Github: https://github.com/Bill13579/pyprog
PyPI: https://pypi.python.org/pypi/pyprog/
источник
Используя ответ @ Mark-Rushakoff, я разработал более простой подход, не нужно вызывать библиотеку sys. Работает с Python 3. Протестировано в Windows:
источник
print
, это тонкая оболочка, которая форматирует ввод и вызывает функцию записи для данного объекта. По умолчанию этот объект естьsys.stdout
.Вот что я сделал, используя решение @ Mark-Rushakoff. Для адаптивной настройки ширины терминала.
источник