print 与 stderr
使用print
和stderr
各有什么特别的优缺点吗?
4 个回答
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)
89
print
可以在任何像文件一样的对象上打印,包括 sys.stderr
。
print >> sys.stderr, 'Text'
使用 sys.stderr
来输出错误信息,而不是 sys.stdout
有以下好处:
- 如果用户把标准输出(stdout)重定向到一个文件,她仍然可以在屏幕上看到错误信息。
- 它没有缓冲区,这样如果
sys.stderr
被重定向到一个日志文件,就更不容易在错误被记录之前程序崩溃。
这个回答是针对 Python 2 的。如果你使用的是 Python 3,请用 print('文本', file=sys.stderr)
来替代。
35
这两者其实是完全不同的东西。print
通常是输出到 sys.stdout
。了解 stdin
、stdout
和 stderr
之间的区别是很重要的,因为它们各自有不同的用途。
具体来说,stdout
用于正常的程序输出,而 stderr
则专门用来显示错误信息(也就是程序执行出错时的情况)。有一些工具可以将这些输出流分开,这样使用你代码的人就能区分正常输出和错误信息。