Я написал простое консольное приложение для загрузки и скачивания файлов с FTP-сервера с использованием ftplib.
Я хотел бы, чтобы приложение показывало некоторую визуализацию процесса загрузки / выгрузки для пользователя; Каждый раз, когда загружается блок данных, я хотел бы, чтобы он предоставлял обновление прогресса, даже если это просто числовое представление в виде процента.
Важно отметить, что я хочу избежать стирания всего текста, который был напечатан на консоли в предыдущих строках (т.е. я не хочу «очищать» весь терминал во время печати обновленного прогресса).
Это кажется довольно распространенной задачей - как я могу сделать индикатор выполнения или подобную визуализацию, которая выводит на мою консоль, сохраняя предыдущий вывод программы?
Ответы:
Простой, настраиваемый индикатор выполнения
Вот совокупность многих ответов ниже, которые я регулярно использую (импорт не требуется).
Примечание: это для Python 3; см. комментарии для деталей об использовании этого в Python 2.
Образец использования
Пример вывода:
Обновить
В комментариях обсуждалась опция, позволяющая динамически настраивать индикатор выполнения в соответствии с шириной окна терминала. Хотя я не рекомендую это, вот суть, которая реализует эту функцию (и отмечает предостережения).
источник
# Size of terminal rows, columns = [int(x) for x in os.popen('stty size', 'r').read().split()]
columns
должно быть передано в длину, чтобы отрегулировать размер индикатора выполнения в окне терминала. Хотя длина прогрессирующей части строки должна быть уменьшена (по длине префикса, суффикса, процента и дополнительных символов в этой строке'\r%s |%s| %s%% %s'
end = '\r'
наend = ''
.Запись «\ r» переместит курсор назад к началу строки.
Это отображает процентный счетчик:
источник
99%
print
естьend
аргумент: stackoverflow.com/a/8436827/1959808print
также естьflush
аргумент: docs.python.org/3/library/functions.html#printtqdm: добавьте индикатор прогресса в ваши циклы в секунду :
источник
Написать
\r
в консоль. Это «возврат каретки», при котором весь текст после него отображается в начале строки. Что-то вроде:что даст вам что-то вроде:
[ ########## ] 100%
источник
\r
а затем снова напишите всю строку. В основном:print("\rProgress: [{0:50s}] {1:.1f}%".format('#' * int(amtDone * 50), amtDone * 100))
гдеamtDone
плавание между 0 и 1.sys.stdout.write
чемprint
. Сprint
I получил новые строки.,
в концеprint
работ для меня.print("\rProgress: [{0:50s}] {1:.1f}%".format('#' * int(workdone * 50), workdone*100), end="", flush=True)
гдеworkdone
находится число от 0 до 1, например,workdone = parsed_dirs/total_dirs
Это менее 10 строк кода.
Суть здесь: https://gist.github.com/vladignatyev/06860ec2040cb497f0f3
источник
Попробуйте библиотеку кликов, написанную Моцартом из Python, Армином Ронахером.
Чтобы создать простой индикатор выполнения:
Вот как это выглядит:
Настройте по своему вкусу содержание:
Пользовательский вид:
Есть еще больше вариантов, см. Документацию по API :
источник
Я понимаю, что опаздываю к игре, но вот немного написанную в стиле Yum (Red Hat), которую я написал (здесь не для 100% точности, но если вы используете индикатор прогресса для этого уровня точности, то вы все равно НЕПРАВИЛЬНО)
Должен произвести что-то похожее на это:
... где скобки остаются неизменными и увеличиваются только хэши.
Это может работать лучше в качестве декоратора. На другой день ...
источник
Проверьте эту библиотеку: clint
у него много функций, включая индикатор выполнения:
эта ссылка предоставляет краткий обзор его возможностей
источник
Вот хороший пример индикатора выполнения, написанного на Python: http://nadiana.com/animated-terminal-progress-bar-in-pythonНо если ты хочешь написать это сам. Вы можете использовать
curses
модуль, чтобы сделать вещи проще :)[править] Возможно, проще не слово для проклятий. Но если вы хотите создать полноценную кухню, проклятия позаботятся о многих вещах для вас.
[править] Поскольку старая ссылка не работает, я установил собственную версию Progressbar Python, получите ее здесь: https://github.com/WoLpH/python-progressbar
источник
curses
? Полегче? Хммм ....вывод
[29%] ===================
источник
и, просто чтобы добавить в кучу, вот объект, который вы можете использовать
результаты в:
Чаще всего это считается «чрезмерным», но это удобно, когда вы часто его используете
источник
Установите
tqdm
. (pip install tqdm
) И используйте его следующим образом:Это индикатор прогресса 10 секунд, который выдаст что-то вроде этого:
источник
Запустите это в командной строке Python ( не в IDE или среде разработки):
Работает нормально в моей системе Windows.
источник
И много учебников, ожидающих, чтобы их гуглили.
источник
Я использую прогресс от Reddit . Мне это нравится, потому что он может печатать прогресс для каждого элемента в одной строке и не должен стирать распечатки из программы.
Редактировать: фиксированная ссылка
источник
Попробуйте установить этот пакет
pip install progressbar2
:Прогрессбар GitHub: https://github.com/WoLpH/python-progressbar
источник
на основании приведенных выше ответов и других подобных вопросов о индикаторе CLI, я думаю, что я получил общий общий ответ на все из них. Проверьте это на https://stackoverflow.com/a/15860757/2254146
Таким образом, код выглядит так:
Похоже
Процент: [##########] 99,0%
источник
Я рекомендую использовать tqdm - https://pypi.python.org/pypi/tqdm - который упрощает превращение любой итерации или процесса в индикатор выполнения и обрабатывает все, что нужно для работы с необходимыми терминалами.
Из документации: «tqdm может легко поддерживать обратные вызовы / перехватчики и обновления вручную. Вот пример с urllib»
источник
Очень простое решение - поместить этот код в ваш цикл:
Поместите это в тело (то есть в начало) вашего файла:
Поместите это в тело вашей петли:
источник
ПРИМЕЧАНИЕ: если вы запустите это в интерактивном interepter, вы получите дополнительные номера распечатаны
источник
LOL Я только что написал целую штуку для этого, вот код, имейте в виду, вы не можете использовать Unicode при выполнении блока Ascii я использую CP437
и ты называешь это так
так это выглядит так
источник
С большими советами выше я работаю над индикатором выполнения.
Однако я хотел бы указать на некоторые недостатки
Каждый раз, когда индикатор выполнения сбрасывается, он начинает новую строку
как это:
[] 0%
[#] 10%
[##] 20%
[###] 30%
2. Квадратная скобка ']' и число процентов на правой стороне сдвигаются вправо по мере увеличения длины ###.
3. Произойдет ошибка, если выражение «progress / 10» не может вернуть целое число.
И следующий код решит проблему выше.
источник
Код для индикатора выполнения терминала Python
источник
я написал простой индикатор:
как видите, он имеет: длину строки, префикс и суффикс, заполнитель, пробел, текст в строке на 100% (oncomp) и границы
вот пример:
в процессе:
закончено:
источник
Собираем некоторые идеи, которые я нашел здесь, и добавляем примерное оставшееся время:
источник
Для питона 3:
источник
Ну вот код, который работает, и я проверил его перед публикацией:
Плюсы:
Минусы:
prog2 = prog/5
наprog2 = int(prog/5)
)источник
Вот мое решение Python 3:
«\ b» - это обратный слеш для каждого символа в вашей строке. Это не работает в окне Windows cmd.
источник
функция от Greenstick для 2.7:
источник
Прогресс- модуль Python - хороший выбор. Вот мой типичный код:
источник