Pexpect pxs sh .pxs sh .expect () как? - PullRequest
       17

Pexpect pxs sh .pxs sh .expect () как?

0 голосов
/ 21 апреля 2020

Мне нужно работать с Unix терминалом типа TTY, где обнаружение подсказки является такой сложной задачей, потому что нет символа подсказки, такого как $ или #. После успешного входа я смог отправить команды. После «c» необходимо добавить команду. Я использую sendline () для отправки. Чтобы завершить команду, отправьте Должен отправить 't' в новой строке.

from pexpect import pxssh
s = pxssh.pxssh()
s.login(host, username, password, terminal_type='vt100', original_prompt='[#$>t\]]', password_regex='(?i)(?:password:)')

s.sendline('c' + command)
s.sendline('t')

И вот где я борюсь. Существует 3 типа вывода:

  1. Данные на одной странице

    Данные начинаются с 'f', за которыми следуют шестнадцатеричные коды в качестве filed_ID и строки, начинающиеся с 'd' в виде данные. В конце в новой строке есть символ «t», поющий завершение команды.

  2. Дополнительные данные страницы

    Данные начинаются с 'f', за которым следуют гекса-коды в качестве filed_IDs, а затем строки, начинающиеся с 'd' в качестве данных. Конец страницы поется «more? [Y]» как подсказка. для следующей страницы нужно отправить «у». В конце вывода команды в качестве завершения стоит буква 't'.

  3. Пустые данные

    В новой строке есть символ 't', но больше ничего .

  4. Ошибка команды

    Дата вывода начинается с 'e1', за которым следует сообщение об ошибке. В конце в новой строке находится 't'.

Таким образом, все команды после завершения отправят 't' в новой строке. Я пытался поймать это с помощью метода wait ()

expect(['\rmore..y.', '\rt\r\n'])

, к сожалению, кажется, что он ловит 't' после команды (что требуется для отправки команды), и ни s.before ни s.after не содержит вывод любой команды.

Как мне правильно это обработать?

В моем текущем решении я создал список возможных выходных данных:

prompt_list = ['\ rmore. .y. ',' e1. ',' f. ',' \ rd \ r \ n \ rt \ r \ n \ r ',' \ rd * t \ r \ n \ r ' , '\ rt \ r \ n \ r']

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

Было бы замечательно, если бы я каким-то образом мог получить доступ ко всем данным до окончания символа 't'.

Есть идеи?

...