我有以下Python 3代码:
from tqdm import tqdm
print("Before")
for _ in tqdm(range(10)): pass
print("After")
我希望将以下输出发送到终端:
Before
100%|##########| 10/10 [00:00<?, ?it/s]
After
然而,我得到的是:
100%|##########| 10/10 [00:00<?, ?it/s]
Before
After
即。打印输出相对于我的代码以错误的顺序结束。我也尝试在调用sys.flush
之前和之后调用print
,只是为了得到以下输出:
Before
100%|##########| 10/10 [00:00<?, ?it/s]After
此外,将print
更改为tqdm.write
并不会对行为产生任何影响。
为什么它以这种意想不到的方式表现?
编辑:这个问题是关于在tqdm循环之前或之后使用print函数的特定情况。还有其他类似的问题是关于在 in tqdm循环中打印消息,在这种情况下不是这样。
答案 0 :(得分:5)
默认情况下,tqdm prints to stderr
。我的诀窍是要specify file=sys.stdout
to tqdm
要么打印到与print
相同的流,要么在致电sys.stderr.flush
之前致电print
。