21

パペット管理を介して centos7 システムにモジュールをインストールしようとするスクリプトを実行しようとしています。スクリプトの実行中に発生するインストールの進行状況バーを実装したいと考えています。これを行うために 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]
...  

私が望むものを達成する方法を教えてください。

4

2 に答える 2

31

プログレスバーの上にメッセージを出力するには、メッセージを出力していることを tqdm に通知する必要があります (そうしないと、tqdm も他のプログレスバーも、プログレスバーの横にメッセージを出力していることを認識できません)。

tqdm.write(msg)そのために、代わりに を使用してメッセージを印刷できますprint(msg)。の代わりにrun_apply()使用するように変更したくない場合は、ここで説明されているように、トップレベル スクリプトから tqdm を介してすべての標準出力をリダイレクトできます。tqdm.write(msg)print(msg)

于 2016-08-11T11:28:03.033 に答える