Python: как писать и читать с существующего псевдо-терминала (pty/pts)

Я пытаюсь программно взаимодействовать с существующей программой, которая предоставляет интерфейс через псевдотерминал (/dev/pts/1)

Я плохо понимаю, как это работает. В настоящее время я могу грубо, но успешно взаимодействовать с:
echo SomeCommandToSend >> /dev/pts/1

И может одинаково грубо получить результаты с:
cat /dev/pts/1

Вопрос: Как я могу чисто и программно взаимодействовать с этим псевдо-терминалом из Python?

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

1 ответ

Решение

Следующий код напечатает один раз hello на ваш терминал (выполнить tty в свой терминал, чтобы получить /dev/pts/n) и бесконечно читать из терминала.

import sys                                           

with open("/dev/pts/1", "wb+", buffering=0) as term:
    term.write("hello".encode())
    while True:
        print(term.read(1).decode(), end='')
        sys.stdout.flush()
Другие вопросы по тегам