28

两者有什么特定的优点或缺点吗printstderr

4

4 回答 4

86

print可以在任何类似文件的对象上打印,包括sys.stderr.

print >> sys.stderr, 'Text'

使用sys.stderrfor errors 而不是的优点sys.stdout是:

  • 如果用户将标准输出重定向到文件,她仍然会在屏幕上看到错误。
  • 它没有缓冲,因此如果sys.stderr重定向到日志文件,则程序在记录错误之前崩溃的可能性较小。

这个答案是用 Python 2 编写的。对于 Python 3,请print('Text', file=sys.stderr)改用。

于 2009-06-02T14:31:45.210 回答
34

它们只是两种不同的东西。print一般去sys.stdout。值得了解, 和- 之间的区别stdinstdoutstderr它们都有其用途。

特别是,stdout应该用于正常的程序输出,而stderr应该只保留用于错误消息(异常程序执行)。有用于拆分这些流的实用程序,它允许您的代码用户区分正常输出和错误。

于 2009-06-02T14:29:35.510 回答
31

注意:这里有一些微妙之处,包括流是否会进入交互式设备。最大的惊喜是在 Python 3 中 stderr 是行缓冲的(至少在 Unix 中)。例如,在终端窗口中,以下在 Python 2 中每两秒打印一个数字:

for n in range(5):
    print >> sys.stderr, n,     # final comma to squelch newline character
    time.sleep(2)

而在 Python 3 中,当循环结束时,以下代码会一起打印数字:

for n in range(5):
    print(n, file=sys.stderr, end='')    # print n to sys.stderr with no newline char
    time.sleep(2)
于 2010-03-09T17:33:44.310 回答
2

在运行脚本时通过将它们重定向到不同的文件来分隔 stderr 和 stdout 很有用。我通常使用 stderr 来记录日志消息并跟踪程序的流程,但使用 stdout 来获取更多有用的消息,我将在以后使用它们。

另一种写入 stderr 的方法如下例所示:

import sys
sys.stderr.write("Error has occurred opening a file!")
于 2013-05-16T16:16:23.353 回答