打印与标准错误
print
或 stderr
有什么具体的优点或缺点吗?
Are there any specific advantages or disadvantages to either print
or stderr
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
print
或 stderr
有什么具体的优点或缺点吗?
Are there any specific advantages or disadvantages to either print
or stderr
?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
print
可以打印任何类似文件的对象,包括sys.stderr
。使用
sys.stderr
代替sys.stdout
来处理错误的优点是:这个答案是根据 Python 2 编写的。
对于 Python 3,请改用
print('Text', file=sys.stderr)
。print
can print on any file-like object, includingsys.stderr
.The advantages of using
sys.stderr
for errors instead ofsys.stdout
are:sys.stderr
is redirected to a log file there are less chance that the program may crash before the error was logged.This answer written with Python 2 in mind.
For Python 3, use
print('Text', file=sys.stderr)
instead.它们只是两个不同的东西。
print
通常会转到sys.stdout
。 值得了解stdin
、stdout
和stderr
- 它们都有各自的用途。特别是,
stdout
应该用于正常程序输出,而stderr
应该仅保留用于错误消息(异常程序执行)。 有一些实用程序可用于拆分这些流,使代码的用户能够区分正常输出和错误。They're just two different things.
print
generally goes tosys.stdout
. It's worth knowing the difference betweenstdin
,stdout
, andstderr
- they all have their uses.In particular,
stdout
should be used for normal program output, whereasstderr
should be reserved only for error messages (abnormal program execution). There are utilities for splitting these streams, which allows users of your code to differentiate between normal output and errors.请注意:这里有一些微妙之处,包括流是否会发送到交互式设备。 最大的惊喜是,在 Python 3 中 stderr 是行缓冲的(至少在 Unix 中)。 例如,在终端窗口中,以下代码在 Python 2 中每两秒打印一个数字:
而在 Python 3 中,以下代码在循环结束时一起打印数字:
Be careful: there are some subtleties here, including whether or not the streams are going to interactive devices. The biggest surprise is that in Python 3 stderr is line buffered (at least in Unix). For example, in a terminal window, the following prints a number every two seconds in Python 2:
whereas in Python 3, the following prints the numbers all together when the loop finishes:
运行脚本时,通过将 stderr 和 stdout 重定向到不同的文件来分离它们非常有用。 我通常使用 stderr 来记录消息并跟踪程序的流程,但使用 stdout 来获取更有用的消息,我稍后将使用它们。
另一种写入 stderr 的方法如下例所示:
It is useful to separate stderr and stdout when running your script by redirecting them to different files. I usually use stderr for log messages and to keep track of the flow of the program, but use stdout for more useful messages that I am going to use them later.
One another way to write to stderr is as the following example: