我正在尝试理解stdin
stdout
和stderr
。
我看到它们一直用在人们的代码中,我无法完全理解它们是什么。我假设他们与输入/输出有关,但一直在网上搜索解释,但找不到。有没有人知道与解释的良好联系,或者它是否足够简单来解释它对我来说是一个很大的帮助。
因为我正在学习Python 3,所以这方面的例子会有所帮助。
答案 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
。