2017-08-24 12 views
1

私は、多くの場合のように、tqdm progress barは、他の印刷によって破壊されていることを、次を参照してください。ここでは唯一の2プログレスバーが表示されるべきtqdmプログレスバーを明示的に "フラッシュ"する方法は?

93%|█████████▎| 28/30 [00:02<00:00, 13.44it/s]Subject S9 
100%|██████████| 30/30 [00:02<00:00, 12.94it/s] 
93%|█████████▎| 28/30 [00:02<00:00, 11.49it/s]Pickling... 
100%|██████████| 30/30 [00:02<00:00, 11.47it/s] 

。それにもかかわらず、一部のテキストを印刷するとプログレスバーが高い割合で中断され、残りの部分が後で印刷されます。

何らかの理由でプログレスバーを「フラッシュ」することはできますか?

私は、デフォルトでstderrへのtqdmプリントを読んで、それ

sys.stderr.flush() 

をフラッシュしようとしたが、これは助けませんでした。

上記はすべてPyCharmコンソールシミュレーションで発生しているので、これに関連付けることができます。

+1

PyCharmの外部でテスト;)。私の経験から、PyCharmが提供するコンソールには時にはいくつかの問題があります。 –

答えて

0

(tqdmはちょっと出力を引き継ぐので)私はあなたの最善の策だと思いますが、あなたがプログレスバーを持っている場合は、このような時に試してみて、印刷することを使用することができますので、

tqdm.write

を使用することです。

In [19]:  from tqdm import tqdm 
    ...:  import time 
    ...: 
    ...:  for i in tqdm(xrange(50)): 
    ...:   if i & 0x1 == 0: 
    ...:   tqdm.write(str(i)) 
    ...:   time.sleep(0.5) 
    ...: 
0 
2 
4 
6 
8 
10 
12 
14%|███████████▌                  | 7/50 [01:50<11:16, 15.73s/it]---------------------------------------------------------------------------    | 11/50 [00:03<00:10, 3.62it/s] 

印刷を終了し、バーを別に下部に保持する必要があります。

あなたは明示的に加えてtqdm.refreshを試してみて、使用することができますバーをリフレッシュしたい場合:

In [16]: gen = tqdm(xrange(50)) 
    0%|                       | 0/50 [00:00<?, ?it/s] 
In [17]: for i in gen: 
    ...:  if i & 0x1 == 0: 
    ...:  print str(i) 
    ...:  gen.refresh() 
    ...:  time.sleep(0.5) 
    ...: 
    ...: 
    ...: 
    ...: 
0 
    2%|█▋                     | 1/50 [00:01<01:17, 1.59s/it]2 
    6%|████▉                    | 3/50 [00:02<00:55, 1.19s/it]4 
10%|████████▎                   | 5/50 [00:02<00:40, 1.10it/s]6 
14%|███████████▌                  | 7/50 [00:03<00:30, 1.41it/s]8 
14%|███████████▌                  | 7/50 [00:03< 

しかし、あなたはまだ印刷されているバーの横にある文字で終わるあなたがtqdm.writeを使用しなくても見ることができるように。

関連する問題