了解stdin stdout stderr

时间:2013-01-28 04:24:29

标签: stdout stdin stderr

我正在尝试理解stdin stdoutstderr

我看到它们一直用在人们的代码中,我无法完全理解它们是什么。我假设他们与输入/输出有关,但一直在网上搜索解释,但找不到。有没有人知道与解释的良好联系,或者它是否足够简单来解释它对我来说是一个很大的帮助。

因为我正在学习Python 3,所以这方面的例子会有所帮助。

2 个答案:

答案 0 :(得分:6)

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>

模式r表示阅读,模式w表示写作

答案 1 :(得分:3)

this能解释得好吗?

  

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