Создание io.BufferedReader из sys.stdin в Python2

#python #bufferedreader #python-2.x

#python #bufferedreader #python-2.x

Вопрос:

Как я могу создать объект BufferedReader из стандартного файлового объекта, такого как sys.stdin или того, что вы получаете из «open»?

(Справочная информация: мне нужен метод 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)
  

Комментарии:

1. Что такое peek() метод? Чего именно вы хотите?

2. peek() возвращает следующий элемент в потоке, не удаляя его из потока. Я пишу синтаксический анализатор и хочу посмотреть.

3. Какие источники ввода вы используете, у которых нет файлового дескриптора?

Ответ №1:

Я также искал тот же код по той же причине (используя peek) некоторое время назад. И это работает:

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