логика в перспективе - PullRequest
       11

логика в перспективе

0 голосов
/ 24 февраля 2012

Привет! Я использую pexpect в Python для чтения информации об устройстве ssh.

expObject = pexpect.spawn('/usr/bin/ssh %s@%s' % (username, device))
expObject.sendline(password)

После ввода пароля у меня отображается некоторая информация об устройстве, и в командной строке он попросит нажать любую клавишу для продолжения;Как только я нажимаю любую клавишу, информация исчезает.

Я использую приведенную ниже логику для захвата других данных, поступающих после передачи команды, например show version

    expObject.expect(CLI_PROMPT)
    data = expObject.before

Так как мне захватить данные, которые отображаются после ввода пароля и перед нажатием любой клавишипродолжайте использовать "expObject".

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

У меня была похожая проблема, когда мне нужно было обрабатывать вывод текста построчно. Чтобы это работало, вы должны знать, что pexpect настраивает регулярное выражение таким образом, что шаблон. * Включает перевод строки, поэтому вместо. * Вы должны использовать [^ \ n] *. Нечто подобное должно работать в вашей ситуации:

child = pexpect.spawn('ssh command goes here')
child.expect('password prompt text\r\n')
child.sendline(password)
data = ""
while True:
    i = child.expect(['press any key to continue', '[^\n]*\r\n'])
    if i == 0:
        break
    data += child.before
print data

Это должно работать с командой, которая выводит следующее:

password propt text
<start of data captured> - 1st line
a second line
a third line
last line <end of data that will be captured>
press any key to continue
1 голос
/ 26 февраля 2012

http://ubuntuforums.org/showthread.php?t=220139

Отличное руководство для того, что вы хотите сделать.Я подозреваю, что вам на самом деле не нужно использовать ожидаемый и можно выполнить все, что вы хотите, просто выполнив команду ssh и ключи ssh.Например:

hostA:~ jdizzle$ ssh hostB hostname
hostB

Вот еще одно руководство по ключам ssh: http://pkeck.myweb.uga.edu/ssh/

...