【问题标题】:Why does python print version info to stderr?为什么python将版本信息打印到stderr?
【发布时间】:2015-07-30 12:05:24
【问题描述】:

为什么 Guido(或其他任何人)决定将 python --version 打印到 stderr 而不是 stdout?只是好奇是什么用例使标准错误比标准输出更合适。

【问题讨论】:

  • 它在 python 3.4 上打印到标准输出
  • 它在 3.2.3 中的标准错误...我们正在缩小范围!
  • 行为由this patch 更改,然后添加到3.4 release notes。原创bug report
  • 我在当天向 stderr 提供了帮助。它被认为是一种友好的方式,可以让您的输出通过管道传输到其他程序,同时在参数不正确时仍转储帮助。管道中的消费者无需担心他们的扫描仪/解析器会被意外文本弄乱。版本号也有帮助,所以它转到 stderr。
  • 3.3 也是标准错误。

标签: python


【解决方案1】:

Python 3.4 被修改为输出到stdout,这是预期的行为。这在此处被列为 Python 的错误:http://bugs.python.org/issue18338。错误报告中的 cmets 表明,虽然 stdout 是合理的选择,但它会破坏向后兼容性。 Python 2.7.9 很大程度上没有改变,因为它非常依赖它。

希望有帮助!

【讨论】:

    【解决方案2】:

    许多程序只会使用stdout 而不在乎,但原则上我更喜欢stderr。简而言之,我相信stdout 是成功执行程序的产物,而stderr 是针对用户的任何消息。计算值转到stdout,而错误、堆栈跟踪、帮助、版本 和使用消息是为用户准备的,应该转到stderr

    我使用这个问题来决定输出哪个流是合适的:此消息是针对该程序主要产品的消费者(无论是人类用户还是其他程序或其他)的消费者,还是仅针对人类用户这个程序?

    另外,顺便说一下,Java 似乎也使用 stderr 来处理版本消息:Why does 'java -version' go to stderr?

    【讨论】:

    • 我会说在python --version的情况下,版本字符串是“程序成功执行的产物”。
    • 感谢 stdoutstderr @Aaron 之间的有效区分。
    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2017-11-24
    • 2010-11-15
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多