У меня есть интерактивный инструмент, работающий на консоли; когда я запускаю инструмент, он ждет команд, выполняет их, а когда я закончу, я набираю команду 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
Идея состоит в том, чтобы последовательно передавать разные команды; что-то вроде того, что вы делали бы в обычной оболочке, и читаете вывод; хотя я не могу заставить это работать. Я не понимаю, как вы взаимодействуете с этим приложением; поскольку он должен работать точно так же, как в терминале, но это не так.