2016-08-04 4 views
6

Я пытаюсь запустить скрипт, который пытается установить модули в системе centos7 с помощью марионеточного управления. Я хочу реализовать индикатор выполнения для установки, который происходит во время запуска скрипта. Я использую модуль tqdm для этого. это несложно, как я реализовал модуль:python progress bar с использованием tqdm, не находящегося на одной строке

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

Здесь run_apply() является функция, которая на самом деле работает и обрабатывает применения конфигурации кукольной.

Пока все хорошо, я получаю индикатор выполнения, но он продолжает двигаться вниз по консоли, когда и сообщения о выполнении записываются на консоль. Но мне нужен индикатор выполнения, чтобы он оставался постоянным в нижней части консоли и динамически обновлялся, если сообщения запуска не мешали бару. Я хочу, чтобы сообщения о выполнении, выполняемые на консоли, продолжались, как они хотят, но индикатор выполнения должен оставаться там внизу от начала до конца выполнения.

Ниже то, что я вижу:

 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] 
... 

Пожалуйста, дайте мне знать, как я могу добиться того, чего я хочу.

ответ

8

Для сообщений, которые должны быть напечатаны над индикатором выполнения, вам нужно сообщить в tqdm, что вы печатаете сообщения (иначе tqdm или любой другой индикатор выполнения не может знать, что вы выводите сообщения рядом с индикатором выполнения).

Для этого вы можете печатать сообщения, используя tqdm.write(msg) вместо print(msg). Если вы не хотите изменять run_apply(), используйте tqdm.write(msg) вместо print(msg), вы можете redirect all standard output through tqdm from the toplevel script as described here.

-1

Попробуйте Использование: Progressbar

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

Это будет выглядеть следующим образом: 43% (13 из 30) | ################### ######### | Истекшее время: 0:00:01 ETA: 0:00:01

+0

Вот эта ссылка: https://pypi.python.org/pypi?%3Aaction=search&term=Progressbar&submit=search –

+0

Эта неудачная победа ' t решить проблему, поскольку сообщения будут распечатаны на индикаторе выполнения, и, следовательно, выход будет искажен, как в OP. – gaborous

+0

Как .... Скажите мне .... –