我试图理解stdin
stdout
和stderr
。
我一直看到它们在人们的代码中使用,我无法准确理解它们是什么。我假设他们与输入/输出有关,但一直在网上搜索解释但找不到。有没有人知道一个很好的解释链接,或者如果它足够简单来解释它会对我有很大帮助。
由于我正在学习 Python 3,因此其中的示例会有所帮助。
sys.stdin
sys.stdout
sys.stderr
解释器用于标准输入、输出和错误的文件对象:
stdin
用于所有交互式输入(包括对 的调用input()
);
stdout
用于print()
和表达式语句的输出和提示input()
;
解释器自己的提示及其错误消息转到stderr
.
为了您的更多理解:
>>> import sys
>>> for i in (sys.stdin, sys.stdout, sys.stderr):
... print i
...
<open file '<stdin>', mode 'r' at 0x103451150>
<open file '<stdout>', mode 'w' at 0x1034511e0>
<open file '<stderr>', mode 'w' at 0x103451270>
moder
表示读取,modew
表示写入
这足以解释清楚吗?
sys.stdin
sys.stdout
sys.stderr
文件对象对应解释器的标准输入、输出和错误流。
stdin 用于除脚本外的所有解释器输入,但包括对 input() 和 raw_input() 的调用。
stdout 用于 print 和 expression 语句的输出以及 input() 和 raw_input() 的提示。
解释器自己的提示和(几乎所有)它的错误消息都发送到 stderr。
stdout 和 stderr 不必是内置文件对象:任何对象都是可以接受的,只要它有一个带有字符串参数的 write() 方法。
(更改这些对象不会影响由 os.popen()、os.system() 或 os 模块中的 exec*() 系列函数执行的进程的标准 I/O 流。)
澄清
如果我告诉 python shell 进行打印:
print 'what is your name?'
“你叫什么名字”会去stdout
,不管那是什么。如果您没有进行任何重定向,则默认情况下是您正在使用的终端。您可以通过各种不同的方式与标准流进行交互,例如:
sys.stdout.flush()
告诉 python shell 强制我print
编辑的任何缓冲信息立即进入stdout
。