Easy to use progress bars for Python
|pypi|
|demo|
.. |pypi| image:: https://img.shields.io/pypi/v/progress.svg :target: https://pypi.org/project/progress/ .. |demo| image:: https://raw.github.com/verigak/progress/master/demo.gif :alt: Demo
There are 7 progress bars to choose from:
BarChargingBarFillingSquaresBarFillingCirclesBarIncrementalBarPixelBarShadyBarTo use them, just call next to advance and finish to finish:
.. code-block:: python
from progress.bar import Bar
bar = Bar('Processing', max=20)
for i in range(20):
# Do some work
bar.next()
bar.finish()or use any bar of this class as a context manager:
.. code-block:: python
from progress.bar import Bar
with Bar('Processing', max=20) as bar:
for i in range(20):
# Do some work
bar.next()The result will be a bar like the following: ::
Processing |############# | 42/100To simplify the common case where the work is done in an iterator, you can
use the iter method:
.. code-block:: python
for i in Bar('Processing').iter(it):
# Do some workProgress bars are very customizable, you can change their width, their fill character, their suffix and more:
.. code-block:: python
bar = Bar('Loading', fill='@', suffix='%(percent)d%%')This will produce a bar like the following: ::
Loading |@@@@@@@@@@@@@ | 42%You can use a number of template arguments in message and suffix:
========== ================================ Name Value ========== ================================ index current value max maximum value remaining max - index progress index / max percent progress * 100 avg simple moving average time per item (in seconds) elapsed elapsed time in seconds elapsed_td elapsed as a timedelta (useful for printing as a string) eta avg * remaining eta_td eta as a timedelta (useful for printing as a string) ========== ================================
Instead of passing all configuration options on instantiation, you can create your custom subclass:
.. code-block:: python
class FancyBar(Bar):
message = 'Loading'
fill = '*'
suffix = '%(percent).1f%% - %(eta)ds'You can also override any of the arguments or create your own:
.. code-block:: python
class SlowBar(Bar):
suffix = '%(remaining_hours)d hours remaining'
@property
def remaining_hours(self):
return self.eta // 3600For actions with an unknown number of steps you can use a spinner:
.. code-block:: python
from progress.spinner import Spinner
spinner = Spinner('Loading ')
while state != 'FINISHED':
# Do some work
spinner.next()There are 5 predefined spinners:
SpinnerPieSpinnerMoonSpinnerLineSpinnerPixelSpinnerDownload from PyPi
.. code-block:: shell
pip install progressThere are a number of other classes available too, please check the source or subclass one of them to create your own.
progress is licensed under ISC
No open issues yet, or sync has not completed.