19

我试图理解stdin stdoutstderr

我一直看到它们在人们的代码中使用,我无法准确理解它们是什么。我假设他们与输入/输出有关,但一直在网上搜索解释但找不到。有没有人知道一个很好的解释链接,或者如果它足够简单来解释它会对我有很大帮助。

由于我正在学习 Python 3,因此其中的示例会有所帮助。

4

2 回答 2

7
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表示写入

于 2013-01-28T04:27:26.513 回答
3

足以解释清楚吗?

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

于 2013-01-28T04:30:45.520 回答