Puppet管理を介して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]
...
欲しいものを達成する方法を教えてください。
進行状況バーの上にメッセージを印刷するには、メッセージを印刷していることをtqdmに知らせる必要があります(そうでない場合、tqdmも他の進行状況バーも、進行状況バーの横にメッセージを出力していることを認識できません)。
これを行うには、tqdm.write(msg)
の代わりにprint(msg)
を使用してメッセージを印刷できます。 run_apply()
の代わりにtqdm.write(msg)
を使用するようにprint(msg)
を変更したくない場合は、 トップレベルスクリプトからtqdmを介してすべての標準出力をリダイレクトしますここで説明されているように 。