Python tqdm和打印奇怪的打印输出顺序

时间:2017-07-23 10:42:06

标签: python output tqdm

我有以下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循环中打印消息,在这种情况下不是这样。

1 个答案:

答案 0 :(得分:5)

默认情况下,tqdm prints to stderr。我的诀窍是要specify file=sys.stdout to tqdm要么打印到与print相同的流,要么在致电sys.stderr.flush之前致电print