Я пытаюсь найти некоторую информацию о низкоуровневом вводе / выводе с потоками 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
не является строго обязательным, но было бы неплохо иметь возможность переключать потоки ввода / вывода (т.е. файл).