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

Hel*_*bye 3 python output tqdm

我有以下Python 3代码:

from tqdm import tqdm

print("Before")
for _ in tqdm(range(10)): pass
print("After")
Run Code Online (Sandbox Code Playgroud)

我希望得到以下输出到终端:

Before
100%|##########| 10/10 [00:00<?, ?it/s]
After
Run Code Online (Sandbox Code Playgroud)

但是,我得到的是:

100%|##########| 10/10 [00:00<?, ?it/s]
Before
After
Run Code Online (Sandbox Code Playgroud)

即打印输出相对于我的代码以错误的顺序结束.我也试过在调用sys.flush之前和之后调用print,只是为了得到以下输出:

Before
100%|##########| 10/10 [00:00<?, ?it/s]After
Run Code Online (Sandbox Code Playgroud)

另外,改变printtqdm.write行为没有任何影响.

为什么它以这种意想不到的方式表现?

编辑:这个问题是关于在tqdm循环之前或之后使用print函数的特定情况.还有其他类似的问题是关于 tqdm循环中打印消息,而在这种情况下并非如此.

Hel*_*bye 5

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