2011-05-19 11 views
22

¿Cómo puedo hacer un objeto BufferedReader desde un objeto de archivo estándar, como sys.stdin o lo que obtienes de 'abrir'?Hacer io.BufferedReader desde sys.stdin en Python2

(Antecedentes: Necesito un método(), ojeada, que los objetos de archivo estándar fallan por tener alguna sugerencia para resolver esta cuestión también son bienvenidos..)

Tendría especie de espera que esto funcione, pero no es así:

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

(Esto es Python 2.7)

Ah, lo consiguió, al menos para cualquier cosa que tenga un descriptor de archivo.

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

¿Qué es un método 'peek()'? ¿Qué es lo que quieres, exactamente? – zeekay

+0

peek() devuelve el siguiente elemento de la transmisión sin eliminarlo de la transmisión. Estoy escribiendo un analizador y quiero mirar hacia adelante. – EvanED

+0

¿Qué fuentes de entrada está utilizando que no tienen un descriptor de archivo? – mxsscott

Respuesta

12

También estaba buscando el mismo código por la misma razón (usando peek) hace un rato. Y esto funciona:

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