Python 3.2空闲与终端

时间:2011-06-05 18:33:13

标签: python python-idle

在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']
>>> 

这是一个错误吗?

1 个答案:

答案 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:
    ...