2011-06-05 65 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: 
    ...