2016-08-04 7 views
6

Próbuję uruchomić skrypt, który próbuje zainstalować moduły w systemie centos7 za pomocą lalek zarządzania. Chcę zaimplementować pasek postępu instalacji, która ma miejsce podczas uruchamiania skryptu. Używam do tego modułu tqdm. to jest bardzo proste, jak i wdrożyliśmy moduł:Pasek postępu python za pomocą tqdm nie przebywa w jednej linii

from tqdm import tqdm 
for i in tqdm(commands): 
    res = run_apply(i) 

Tutaj run_apply() jest funkcją, która faktycznie działa i obsługuje konfigurację stosowania lalkowy.

Jak na razie dobrze, dostaję pasek postępu, ale przesuwa się w dół konsoli, kiedy i na konsoli są zapisywane komunikaty wykonawcze. Potrzebuję jednak paska postępu, aby pozostać stały na dole konsoli i otrzymywać dynamicznie aktualizowane informacje bez zakłócania działania komunikatów paska. Chcę, aby komunikaty dotyczące wykonania na konsoli działały zgodnie z oczekiwaniami, ale pasek postępu powinien po prostu pozostać na dole od początku do końca wykonywania.

Poniżej jest to, co widzę:

 File line: 0.00 
      Package: 0.05 
      Service: 0.19 
      File: 0.23 
      Exec: 0.23 
     Last run: 1470308227 
    Config retrieval: 3.90 
      Total: 4.60 
Version: 
      Config: 1470308220 
      Puppet: 3.7.3 
now here x 
result: 2 
38%|█████████████████████████████████████▋               | 5/13 [00:29<00:51, 6.44s/it]about to: profiles::install::download_packages 
about to run puppet apply --summarize --detailed-exitcodes --certname puppet -e "include profiles::install::download_packages" 
Error: Could not find class profiles::install::download_packages for puppet on node puppet 
Error: Could not find class profiles::install::download_packages for puppet on node puppet 
now here x 
result: 1 
46%|█████████████████████████████████████████████▏             | 6/13 [00:32<00:36, 5.27s/it]about to: profiles::install::install 
about to run puppet apply --summarize --detailed-exitcodes --certname puppet -e "include profiles::install::install" 
Error: Could not find class profiles::install::install for puppet on node puppet 
Error: Could not find class profiles::install::install for puppet on node puppet 
now here x 
result: 1 
54%|████████████████████████████████████████████████████▊            | 7/13 [00:34<00:26, 4.45s/it]about to: stx_network 
about to run puppet apply --summarize --detailed-exitcodes --certname puppet -e "include stx_network" 
Notice: Compiled catalog for puppet in environment production in 0.84 seconds 
Notice: /Stage[main]/Stx_network/Tidy[purge unused nics]: Tidying File[/etc/sysconfig/network-scripts/ifcfg-lo] 
... 

Proszę dać mi znać jak mogę osiągnąć to, co chcę.

Odpowiedz

8

Aby wiadomości były drukowane nad paskiem postępu, musisz zasygnalizować tqdm, że drukujesz wiadomości (w przeciwnym razie tqdm, ani żaden inny pasek postępu, nie mogą wiedzieć, że wyprowadzasz wiadomości obok paska postępu).

W tym celu można wydrukować wiadomości, używając tqdm.write(msg) zamiast print(msg). Jeśli nie chcesz modyfikować run_apply(), aby użyć tqdm.write(msg) zamiast print(msg), możesz redirect all standard output through tqdm from the toplevel script as described here.

-1

Spróbuj użyć: Progressbar

import Progressbar 
progress = progressbar.ProgressBar() 
for i in progress(range(30)): 
    time.sleep(0.1) 

Będzie to wyglądać tak: 43% (13 z 30) | ################### ######### Czas, który upłynął: 0:00:01 ETA: 0:00:01

+0

Oto link do niego: https://pypi.python.org/pypi?%3Aaction=search&term=Progressbar&submit=search –

+0

To nieszczęśliwie wygrał " • rozwiązać problem, ponieważ komunikaty będą drukowane na pasku postępu, a zatem wynik będzie zniekształcony tak jak w OP. – gaborous

+0

Jak .... Powiedz mi ... –