打印与标准

2024-04-27 10:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

printstderr有什么特殊的优点或缺点吗?


Tags: stderr优点print缺点
3条回答

它们只是两种不同的东西。print通常转到sys.stdout。值得知道^{}, ^{}, and ^{}之间的区别——它们都有各自的用途。

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

注意:这里有一些微妙之处,包括流是否会流向交互设备。最令人惊讶的是,在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)

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

print >> sys.stderr, 'Text'

对错误使用sys.stderr而不是sys.stdout的优点是:

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

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

相关问题 更多 >