【问题标题】:Python tqdm and print weird printout order [duplicate]Python tqdm 并打印奇怪的打印输出顺序 [重复]
【发布时间】:2017-12-29 01:39:53
【问题描述】:

我有以下 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

即相对于我的代码,打印输出的顺序错误。我还尝试在两次调用print 之前和之后调用sys.flush,只是得到以下输出:

Before
100%|##########| 10/10 [00:00<?, ?it/s]After

另外,将print 更改为tqdm.write 对行为没有任何影响。

为什么它会以这种意想不到的方式运行?

编辑: 这个问题是关于在 tqdm 循环之前或之后使用打印功能的具体情况。还有其他类似的问题是关于在 in tqdm 循环中打印消息,这里不是这种情况。

【问题讨论】:

  • @zwer 我不会说这一定是重复的,因为该问题是关于仍在 tqdm 循环中的打印。但是这个问题的一个答案为我提供了一个解决方案,所以谢谢! :)
  • @zwer 我相信这个问题被错误地标记为另一个问题的完全重复 - 正如我在对问题的编辑中解释的那样,它们是不同的。如何取消将其标记为完全重复?

标签: python output tqdm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2014-04-26
    • 2013-06-30
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多