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
我认为只有 STDOUT 应该在终端中可见。
不正确。 stderr 是一个单独的文件描述符,但默认情况下它仍然连接到与 stdout 相同的 tty。
默认情况下,stdout 和 stderr 流都与您的显示设备连接,这就是您在屏幕上看到 syserr 消息的原因。
正常情况下,终端中会显示
stdout
和 stderr
。如果您的操作系统支持,您可以将其中一个或两个重定向到其他地方。例如,您可以重定向 stdout
,并且您只会在终端中看到 stderr
(或者您可以重定向 stderr
,并且您只会在终端中看到 stdout
)。
尝试将输出重定向到文件以查看其工作原理:
$ python stdout_stdin.py > output
STDERR
$ cat output
STDOUT
除非您重定向其中之一,否则默认情况下,两者都会显示在普通终端中。 STDERR 非常适合错误消息,因为即使您将实际输出保存到文件中,它们也会显示。