打印与标准错误

发布于 2024-07-23 10:06:23 字数 61 浏览 9 评论 0原文

printstderr 有什么具体的优点或缺点吗?

Are there any specific advantages or disadvantages to either print or stderr?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

柳絮泡泡 2024-07-30 10:06:23

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

print >> sys.stderr, 'Text'

使用 sys.stderr 代替 sys.stdout 来处理错误的优点是:

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

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

print can print on any file-like object, including sys.stderr.

print >> sys.stderr, 'Text'

The advantages of using sys.stderr for errors instead of sys.stdout are:

  • If the user redirected stdout to a file, she still sees errors on the screen.
  • It's not buffered, so if 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.

猥︴琐丶欲为 2024-07-30 10:06:23

它们只是两个不同的东西。 print 通常会转到 sys.stdout。 值得了解 stdinstdoutstderr - 它们都有各自的用途。

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

They're just two different things. print generally goes to sys.stdout. It's worth knowing the difference between stdin, stdout, and stderr - they all have their uses.

In particular, stdout should be used for normal program output, whereas stderr 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.

攒眉千度 2024-07-30 10:06:23

请注意:这里有一些微妙之处,包括流是否会发送到交互式设备。 最大的惊喜是,在 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)

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:

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

whereas in Python 3, the following prints the numbers all together when the loop finishes:

for n in range(5):
    print(n, file=sys.stderr, end='')    # print n to sys.stderr with no newline char
    time.sleep(2)
清欢 2024-07-30 10:06:23

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

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

import sys
sys.stderr.write("Error has occurred opening a file!")

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:

import sys
sys.stderr.write("Error has occurred opening a file!")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文