[#] Zaawansowany pasek postępu w skryptach Python

( Ostatnio zmieniony czw., 19/06/2008 - 00:53 )
 
  1. Pobieramy bibliotekę progressbar, ze strony projektu: http://pypi.python.org/…/progressbar (Licencja LGPL)
  2. Instalujemy używając setup.py lub kopiujemy do naszego katalogu plik progressbar.py
  3. Tworzymy program pasek_postepu.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-

from progressbar import *


def przyklad_1():
  widgets = ['Test: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
             ' ', ETA(), ' ', FileTransferSpeed()]
  pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
  for i in range(1000000):
    # do something
    pbar.update(10*i+1)
  pbar.finish()
  print


def przyklad_2():
  class CrazyFileTransferSpeed(FileTransferSpeed):
    "It's bigger between 45 and 80 percent"
    def update(self, pbar):
      if 45 < pbar.percentage() < 80:
        return 'Bigger Now ' + FileTransferSpeed.update(self,pbar)
      else:
        return FileTransferSpeed.update(self,pbar)

  widgets = [CrazyFileTransferSpeed(),' <<<', Bar(), '>>> ', Percentage(),' ', ETA()]
  pbar = ProgressBar(widgets=widgets, maxval=10000000)
  # maybe do something
  pbar.start()
  for i in range(2000000):
    # do something
    pbar.update(5*i+1)
  pbar.finish()
  print


def przyklad_3():
  widgets = [Bar('>'), ' ', ETA(), ' ', ReverseBar('<')]
  pbar = ProgressBar(widgets=widgets, maxval=10000000).start()
  for i in range(1000000):
    # do something
    pbar.update(10*i+1)
  pbar.finish()
  print


def przyklad_4():
  widgets = ['Test: ', Percentage(), ' ',
             Bar(marker='0',left='[',right=']'),
             ' ', ETA(), ' ', FileTransferSpeed()]
  pbar = ProgressBar(widgets=widgets, maxval=500)
  pbar.start()
  for i in range(100,500+1,50):
    time.sleep(0.2)
    pbar.update(i)
  pbar.finish()
  print


przyklad_1()
przyklad_2()
przyklad_3()
przyklad_4()

gdzie:

Przykład 1 zwróci:

Test: 100% |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Time: 00:00:02   3.40 M/s

Przykład 2 zwróci:

1.63 M/s <<<|###########################################################                    |>>> 80% Time: 00:00:06

Przykład 3 zwróci:

|>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    | Time: 00:00:03 |                    <<<<<<<<<<<<<<<<<<<<<<<<<<<<|

Przykład 4 zwróci:

Test: 100% [00000000000000000000000000000000000000000000000000000000000000000000000000000] Time: 00:00:01 278.09 B/s
Twoja ocena: Brak Średnio: 5 (2 głosy)

Dodaj nową odpowiedź

Informacja:

Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich, mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Upewnij się, że twoja wypowiedź nie godzi w niczyje mienie.

  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <strong> <blockquote> <code>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

Łapirobot
Proszę odpowiedzieć
2
n
s
t
2
5
T
4
7
t
Enter the code without spaces and pay attention to upper/lower case.