为什么当我写入 stderr 时,我会在 stdout 上看到 STDERR 输出?

问题描述 投票:0回答:4
import sys

if __name__ == '__main__':
    sys.stdout.write("STDOUT\n")
    sys.stderr.write("STDERR\n")

您能解释一下为什么当我写入 stderr 时,我在 stdout 上看到 STDERR 输出吗?我认为只有 STDOUT 应该在终端中可见。

$ python stdout_stdin.py
STDOUT
STDERR
python stdout stderr
4个回答
3
投票

我认为只有 STDOUT 应该在终端中可见。

不正确。 stderr 是一个单独的文件描述符,但默认情况下它仍然连接到与 stdout 相同的 tty。


1
投票

默认情况下,stdout 和 stderr 流都与您的显示设备连接,这就是您在屏幕上看到 syserr 消息的原因。


1
投票

正常情况下,终端中会显示

stdout
stderr
。如果您的操作系统支持,您可以将其中一个或两个重定向到其他地方。例如,您可以重定向
stdout
,并且您只会在终端中看到
stderr
(或者您可以重定向
stderr
,并且您只会在终端中看到
stdout
)。


0
投票

尝试将输出重定向到文件以查看其工作原理:

$ python stdout_stdin.py > output
STDERR
$ cat output
STDOUT

除非您重定向其中之一,否则默认情况下,两者都会显示在普通终端中。 STDERR 非常适合错误消息,因为即使您将实际输出保存到文件中,它们也会显示。

© www.soinside.com 2019 - 2024. All rights reserved.