为什么tqdm的输出被定向到sys.stderr而不是sys.stdout?

3
根据 Python sys.stdou 和 sys.stderr 相关文档

stdout 用于 print() 和表达式语句的输出以及 input() 的提示;

解释器自己的提示和错误信息会发送到 stderr。

然而,根据 tqdm 的文档,缺省输出是 sys.stderr。
我对为什么会这样感到困惑,因为它似乎与解释器自己的提示或错误消息无关。我错过了什么?为什么 tqdm 输出被定向到 sys.stderr 而不是 sys.stdout?
编辑:我认为这里的讨论在某种程度上回答了这个问题:何时使用 sys.stdout 而不是 sys.stderr?
1个回答

4

将进度条重定向到 sys.stderr 使得在命令行中使用 tqdm 更加强大。例如,考虑以下命令:

$ time find . -name '*.py' -type f -exec cat \{} \; | tqdm | wc -l

只需在管道之间插入 tqdm(或 python -m tqdm),就可以将所有的 stdin 传递到 stdout,同时在 stderr 中打印进度。这使得管道更容易使用,因为 tqdm 不会改变一个命令的 stdout,从而允许我们在同一链中使用 wc -l


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接