pexpect получить информацию о приложении - PullRequest
1 голос
/ 26 мая 2020

Я использую pexpect для запуска nano с хоста linux, я пытаюсь найти способ получить информацию от pexpect, чтобы я мог перестроить nano (или vi или любое терминальное приложение) где-нибудь еще.

Что-то вроде:

p = pexpect.spawn('/bin/bash')
p.sendline('nano cheese')
#Get the tty information for the nano/vi/whatever UI#

По сути, я хочу переслать информацию (информация, являющаяся пользовательским интерфейсом приложения) без прямого взаимодействия с ней, возможно ли это?

1 Ответ

1 голос
/ 26 мая 2020

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

Должно получиться что-то вроде этого:

import pexpect

p = pexpect.spawn('nano cheese')
output = []
while p.isalive():
    output.append(p.read_nonblocking(100000))
    #Conditionals about what is in output could be put here. 
    #You can also tell pexpect to block until it finds specific strings, with .expect()
    p.sendline(input().encode())

Пытаясь следить за тем, что должно быть набрано в "nano", я думаю, вы хотите сделать что-то вроде этого:

y       #answer yes to first question
^X      #exit nano
n       #no, don't save
<enter> #anything sent should end the process here.

Предполагается, что «nano» не запросил что-то неожиданное, например, файл или что-то в этом роде, et c. Вы можете использовать p.expect для инициирования определенных действий на основе строк, которые отображаются в выводе. Распечатайте вывод, чтобы увидеть, что вам отправляет "nano".

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