8

我有以下 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 函数的特定情况。还有其他类似的问题是关于tqdm 循环中打印消息的,这里不是这种情况。

4

1 回答 1

9

默认情况下,tqdm 打印到stderr. 对我来说,诀窍是要么指定file=sys.stdout使其tqdm打印到与 相同的流print,要么在调用sys.stderr.flush之前调用print

于 2017-07-23T13:37:49.990 回答