Могу ли я использовать Popen для интерактивной передачи и чтения команд вызываемому процессу? - PullRequest
1 голос
/ 14 июля 2020

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

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

Это то, что я делал до сих пор:

proc = Popen(myapp, stdin=PIPE,stdout=PIPE, stderr=PIPE, shell=False, universal_newlines=True)
print(proc.stdout.readline())

Это открывает мое приложение и распечатывает первую строку вывода, но даже если я передаю напишите заявление на stdin, ничего не происходит. Если бы я запустил это с терминала, я бы получил 4 строки до того, как появится подсказка, но здесь я получаю только первую строку.

proc.stdin.write('list\n')
proc.stdin.flush()
print(proc.stdout.readline())

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

total_lines = len(proc.stdout.readline()) # this returns me 300+ lines instead of 3
for lines in range(total_lines):
    print(proc.stdout.readline()) # when the counter passes 3, the app hangs

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

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