2011-06-05 64 views
4

在蟒蛇3.2 OSX下,我是否会在空闲我得到一个奇怪的答案运行“中输入(sys.stdin)”如下图所示的Python 3.2空闲VS终端

>>> type(sys.stdin) 
<class 'idlelib.rpc.RPCProxy'> 
>>> 

但是,如果我会reun我得到:

>>> 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

工作aorund使用'w = list(sys.stdin)',它将始终工作。我认为这是一个bug - “sys.stdin”应该实现'io.IOBase'的接口。 – 2011-06-05 18:46:32

+0

这也发生在Python 2.7中 – Xolve 2011-06-05 18:56:46

+0

它发生在IDLE的所有版本中,至少自readlines被引入以来。不幸的是,正如下面引用的开放式bug所指出的那样,IDLE的stdin,stdout和stderr代理实现并不完整且是最新的。 – 2011-06-05 19:11:30

回答

7

这是一个Python的归档错误:

http://bugs.python.org/issue9290

事实上,在IDLE sys.stdin是 IDLE并在命令行模式下具有不同的行为 idlelib.rpc.RPCProxy结果 程序。

我注意到当给IDLE中的许多 学生练习时。事情 喜欢:

sys.stdin.readlines() 

只是鸵鸟政策存在IDLE,但 在命令行模式 全面运作。

在命令行模式下,sys.stdin是一个 文件。

这是意料之中的,因为手动(27.1) 说,sys.stdin(和stdout和 stderrr)是“File对象对应翻译的 标准输入 ”

还有其他的“怪癖”。

我倒是觉得奇怪 stdin对于 同一个程序有不同的行为。


注意,这可能是不固定的,因为readlines通常不是很有用。相反,你可以迭代文件对象本身:

for line in sys.stdin: 
    ...