在OSX下的python 3.2中,如果我在Idle下运行“type(sys.stdin)”,我会得到一个奇怪的答案,如下所示
>>> type(sys.stdin)
<class 'idlelib.rpc.RPCProxy'>
>>>
但如果我在终端下重新启动相同的命令,我会得到:
>>> import sys
>>> type(sys.stdin)
<class '_io.TextIOWrapper'>
>>>
我明白这是因为我在IDLE下运行它。但这不是误导吗?
我试图在IDLE中运行以下命令,花了好几个小时试图理解为什么这不起作用。 (我还是一个蟒蛇菜鸟)
>>> w = sys.stdin.readlines()
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
w = sys.stdin.readlines()
AttributeError: readlines
但刚刚发现我在终端下工作正常。
>>> w = sys.stdin.readlines()
wow
ww
wewew
>>>
>>> w
['wow\n', 'ww\n', 'wewew\n']
>>>
这是一个错误吗?
答案 0 :(得分:7)
这是一个提交的Python错误:
http://bugs.python.org/issue9290
在IDLE sys.stdin中是一个事实
idlelib.rpc.RPCProxy
会产生 具有不同行为的程序 IDLE和命令行模式。我注意到在评分很多时 学生们在IDLE练习。事情 像:
sys.stdin.readlines()
在IDLE中不存在,但是 在命令行中完全运行 模式。
在命令行模式下,sys.stdin是一个 文件。
这是预期的,如手册(27.1) 说sys.stdin(和stdout和 stderrr)是“文件对象 对应于口译员 标准输入“
还有其他“怪癖”。
我失败了,这真的很奇怪 stdin有不同的行为 同样的计划。
请注意,这可能不是固定的,因为readlines
通常不常用。相反,您可以迭代文件对象本身:
for line in sys.stdin:
...