Команда ввода ключа иногда не работает в pexpect - PullRequest
0 голосов
/ 15 октября 2019

Я использую скрипт ниже pexpect для входа на консольный сервер Avocent для подключения к сетевому устройству. После ввода пароля сервера требуется нажать клавишу «Enter», чтобы появилось приглашение. Чтобы добиться этого, я пробовал child.sendline(), child.send('\n') и child.sendcontrol ('m'), но ни один из них не работал. Я пробовал child.send('\r'), но работает с перебоями. Не уверен, что является причиной проблемы.

Я увидел, что когда скрипт застревает в ожидании клавиши ввода, если я вручную войду в консоль и отправлю клавишу ввода через клавиатуру, скрипт pexpect продолжится.

Вот мой фрагмент кода:

child = pexpect.spawn('ssh local@x.x.x.x', timeout=120)
child.expect('Password:', timeout=60)
child.sendline(avocentpswd)
child.send('\r')
print "enter key sent"
cli = child.expect(['cisco#' , 'cisco>'])

Использование pexpect == 4.7.0 Python 2.7.5 ОС: RHEL v7

Может кто-нибудь помочь, пожалуйста.

Я проверил поднятые проблемы, но это не помогло: pexpect и отправка "Enter Key" вопросов

1 Ответ

0 голосов
/ 15 октября 2019

Возможно, вам просто нужно подождать секунду или две, пока ssh завершит подключение, и сбросить режим tty на эхо. Попробуйте добавить import time;time.sleep(5) перед отправкой \r, и, если это работает, используйте цикл вроде (не проверено):

for tries in range(5):
   child.send('\r')
   cli = child.expect([pexpect.TIMEOUT, 'cisco#' , 'cisco>'], timeout=1)
   if cli!=0: break
else: ... fail ...
... ok ...
...