2011-05-19 46 views
22

如何從標準文件對象中創建BufferedReader對象,如sys.stdin或從'open'中獲得的內容?在Python2中從sys.stdin製作io.BufferedReader

(背景:我需要一個PEEK()方法,標準文件對象不能在有任何建議來解決這個問題,也歡迎。)

我有幾分期待這個工作,但事實並非如此:

>>> import sys 
>>> import io 
>>> io.BufferedReader(sys.stdin) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'file' object has no attribute 'readable' 

(這是Python 2.7版)

哈,知道了,至少對於任何有文件描述符。

stream = sys.stdin, or open(...), etc. 
reader = io.open(stream.fileno(), mode='rb', closefd=False) 
+0

什麼是peek()'方法?你想要什麼,確切地說? – zeekay 2011-05-19 21:58:04

+0

peek()返回流中的下一個項目,而不從流中移除它。我正在編寫一個解析器並希望向前看。 – EvanED 2011-05-19 22:34:51

+0

你使用哪些輸入源沒有文件描述符? – mxsscott 2012-11-18 19:11:04

回答

12

我也在尋找相同的原因(使用偷看)相同的代碼前一段時間。這工作:

reader = io.open(sys.stdin.fileno())