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

Why when I write to stderr I see STDERR output on the stdout?

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

I supposed only STDOUT should be visible in the terminal.

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

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

通常在终端显示stdoutstderr。如果您的 OS 支持它,您可以将一个或两个重定向到其他地方。例如,您可以重定向 stdout,您只会在终端中看到 stderr(或者您可以重定向 stderr,您只会在终端中看到 stdout)。