Низкоуровневый поток ввода / вывода в Python - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь найти некоторую информацию о низкоуровневом вводе / выводе с потоками sys.stdin и sys.stdout в Python 3.7, но мой Google-fu меня подводит.

По сути, у меня есть интерактивное приложение, в котором я хочу читать необработанные байты с консоли (т. Е. sys.stdin), не повторяя введенные данные, пока я не запишу их обратно в sys.stdout. Моя первая попытка была следующей, но она повторяет то, что набирается, и вывод не отображается, пока я не отправлю EOF.

while True:
    read_bytes = sys.stdin.buffer.read()
    # do something with the bytes before echo
    sys.stdout.buffer.write(read_bytes)
    sys.stdout.buffer.flush()

Я нашел следующий фрагмент, чтобы отключить эхо-вывод терминала, который, кажется, работает, но мне все еще нужно читать байты без необходимости отправлять EOF.

def enable_echo(fd, enabled):
    (iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(fd)

    if enabled:
        lflag |= termios.ECHO
    else:
        lflag &= ~termios.ECHO

    new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
    termios.tcsetattr(fd, termios.TCSANOW, new_attr)

Обдумываю ли я, как это сделать? Такое ощущение, что я что-то упускаю из виду, или, возможно, есть модуль Python, который уже делает это для меня. Использование необработанных sys.stdin и sys.stdout не является строго обязательным, но было бы неплохо иметь возможность переключать потоки ввода / вывода (т.е. файл).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...