LINUX.ORG.RU

не ловит ответ

 ,


0

1

Использую pexpect (expect на python) для работы с коммутатором через telnet:

def snmp(cli):
    text("----- snmp")
    cli.sendline("")
    print "before1=", cli.before
    print "after1=", cli.after
    cli.expect("Switch# ")
    cli.sendline("configure terminal")
    print "before2=", cli.before
    print "after2=", cli.after
    cli.expect("Switch(config)# ")
    cli.sendline("snmp-server community public ro")
    cli.expect("Switch(config)# ")
    cli.sendline("snmp-server community private rw")
    cli.expect("Switch(config)# ")
    text("snmp OK")

def login(cli):
    text("----- login")
    cli.expect('Switch login: ')
    cli.sendline('admin')
    cli.expect('Password:')
    cli.sendline('admin')
    cli.expect("Switch> ")
    cli.sendline("enable")
    cli.expect("Switch# ")
    text("login OK")

def test2():
    import sys
    import pexpect
    cli = pexpect.spawn('telnet 192.168.2.4', timeout = 3)
    cli.delaybeforesend = 0.2
    cli.logfile = sys.stdout
    login(cli)
    snmp(cli)
В результате:
CLI ----- login
Trying 192.168.2.4...
Connected to 192.168.2.4.
Escape character is '^]'.
Switch login: admin
admin
Password: admin


JetNet5310G (version 1.4-20140529-15:14:55).
Copyright 2006-2012 Korenix Technology Co., Ltd.

Switch> enable
enable
Switch# 
CLI login OK

CLI ----- snmp

before1= enable

after1= Switch# 

Switch# configure terminal
before2= 

after2= Switch# 
configure terminal
Switch(config)# Traceback (most recent call last):
Последняя строка это оно уже по таймауту вылетает и как положено.

Вопрос: почему login срабатывает, а это нет? Видно же что искомая строка с пробелом на конце («Switch(config)# », и без него пробовал тоже) - появляется, но pexpect на этом вешается и не реагирует. Есть же ответ, что ему не нравится? Как правильно его использовать? А то уже думаю другую версию expect-а брать.

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от GPFault

Не совсем понял вопрос...

    cli.sendline("configure terminal")
    print "before2=", cli.before
    print "after2=", cli.after
    cli.expect("Switch(config)# ")
В ответе видео что после ввода «configure terminal» в буфере появляется
after2= Switch# 
configure terminal
Switch(config)# 
и это последнее - искомая строка.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от gh0stwizard

Оказалось проще тупо написать свой аналог expect-а: http://paste.org.ru/?v335bw Заодно он работает как через telnet (через QTCPSocket) так и через QSerialPort...

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.