В связи с некоторыми вычислениями на питоне (например, подсчётом коэффициента симметрии карты реликтового излучения) мне захотелось сделать процесс более наглядным. Ну хотя бы добавить прогресс-бар. Скучно, знаете ли, сидеть перед пустой консолью и втыкать на запущенную команду. То ли работает, то ли висит… с ходу не понять. А делать какой-нибудь лог исполнения не хочется, так как потом в полученом хаосе глаз теряется.
Недавно нашёл выход: модуль progressbar. Модуль существует в deb-репозиториях (я нашёл его в репозиториях ubuntu 9.10), ставится пакетом python-progressbar:
Для начала можно попробовать запустить небольшой пример:
Теперь немного поподробнее о самых простых и часто встречающихся случаях использования (насколько могу себе их помыслить).
Во-первых в конструкторе progressbar.ProgressBar(maxval=100) есть аргумет maxval, задающий максимальное значение в полоске. Он может быть как целый, так и вещественный. Соответственно, в progressbar.ProgressBar.update() можно также передавать вещественное число.
И, наконец, о вкусном: виджеты. Ещё одним аргументом в конструктор progressbar.ProgressBar() можно передать массив виджетов. Каждый виджет имеет ряд своих настроек. Наибольшее количество, видимо, у штуки progressbar.Bar. Из следующего примера должно быть очевидно, как можно просто и непринуждённо использовать свой набор виджетов:
К модулю прилогается подробная документация. Так что проблем с освоением возникнуть не должно. Хотя последний пример, я думаю, покрывает 90% всех задач.
Из минусов модуля можно отметить нежелание работать в консоли Windows.
UPD by xvoland: python-progressbar on pypi.python.org
Недавно нашёл выход: модуль progressbar. Модуль существует в deb-репозиториях (я нашёл его в репозиториях ubuntu 9.10), ставится пакетом python-progressbar:
Copy Source | Copy HTML
- sudo apt-get install python-progressbar
Для начала можно попробовать запустить небольшой пример:
Copy Source | Copy HTML
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import progressbar
- import time
-
- bar = progressbar.ProgressBar().start() # Создаём новый progress bar
-
- for t in xrange(101):
- bar.update(t) # Таким образом можно устанавливать значение.
- time.sleep(0.01)
- bar.finish() # Заканчиваем обновлять -- далее можно
- print "finished =)"
Теперь немного поподробнее о самых простых и часто встречающихся случаях использования (насколько могу себе их помыслить).
Во-первых в конструкторе progressbar.ProgressBar(maxval=100) есть аргумет maxval, задающий максимальное значение в полоске. Он может быть как целый, так и вещественный. Соответственно, в progressbar.ProgressBar.update() можно также передавать вещественное число.
Copy Source | Copy HTML
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import progressbar
- import time
-
- bar = progressbar.ProgressBar(maxval=10.0).start()
-
- t = 0.0
- while t <= 1.0:
- bar.update(t)
- time.sleep(0.01)
- t += 0.01
- bar.finish()
И, наконец, о вкусном: виджеты. Ещё одним аргументом в конструктор progressbar.ProgressBar() можно передать массив виджетов. Каждый виджет имеет ряд своих настроек. Наибольшее количество, видимо, у штуки progressbar.Bar. Из следующего примера должно быть очевидно, как можно просто и непринуждённо использовать свой набор виджетов:
Copy Source | Copy HTML
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import progressbar
- import time
-
- bar = progressbar.ProgressBar(maxval=10.0, widgets=[
- 'Just a progress bar test: ', # Статический текст
- progressbar.Bar(left='[', marker='=', right=']'), # Прогресс
- progressbar.ReverseBar(left='[', marker='*', right=']'), # Регресс
- progressbar.SimpleProgress(), # Надпись "6 из 10"
- ]).start()
-
- t = 0.0
- while t <= 10.0:
- bar.update(t)
- time.sleep(0.01)
- t += 0.1
- bar.finish()
К модулю прилогается подробная документация. Так что проблем с освоением возникнуть не должно. Хотя последний пример, я думаю, покрывает 90% всех задач.
Из минусов модуля можно отметить нежелание работать в консоли Windows.
UPD by xvoland: python-progressbar on pypi.python.org