Python - Telnet на маршрутизаторах и список Полный результат (ударов пробел)

StackOverflow https://stackoverflow.com/questions/3690606

  •  02-10-2019
  •  | 
  •  

Вопрос

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 
    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

Моя проблема в том, что когда я пытаюсь захватить «шоу журнал» из маршрутизатора Cisco, это дает мне просто частичный результат, я вещь, потому что вам нужно ударить космический бар 5 раз (зависит от того, как долго есть история журнала), чтобы получить полный журнал Когда я делаю это под руководством, и я не знаю, как сказать Python, чтобы перечислить полный журнал. Любое предложение?

Это было полезно?

Решение

Не решение, но кажется правдоподобным обходным путем:

Вы можете отключить пейджинг терминала, выдавая следующую команду IOS CLI.

Длина концевой связи 0.

Другие советы

На самом деле это точный ответ ..... вы должны ввести длину 0 или страницы маршрутизатора. Выход, как использовать UNIX «Подробнее», чтобы он был читабелен и не просто прокручивается

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 

    telnet.write("term length 0"+ "\r\n")

    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

Затем проблема становится тем, как захватывать выходные данные больше, чем около 20 кБ ... при входе в файл, я получаю все выводы, но я хочу сохранить только выборочный выход, а не весь сеанс. При использовании Champt.apter Выход усечен, например, начало отсутствует, который можно немного смягчить, увеличивая MAXREAD, но оно все еще бомбы при приближении к 30-40 кБ.

Для тех, кто задается вопросом, я схватив вывод коммутаторов Cisco с использованием «SH INT | I Protocol | Last» Это только возвращает 3 строки на интерфейс, но некоторые из стеков переключателя моего клиента имеют 450 портов.

Не уверен, что здесь динамика, но для некоторых коммутаторов она добивается успеха.

Некоторое время я попытался поработать по вопросу, выборочно превращая в систему ввода в файл и выключение. Это оказалось ненадежным и из общего ведения журнала, я вижу, что PExpect соответствует выходным способом до того, как журнал видит его. Я закончил отключение журнала, пока данные все еще были записаны в файл. усечение выхода после 10 строк выхода.

Таким образом, окончательный вопрос остается, как можно увеличить надежность ребенка. После. Для того, чтобы захватить большие выходы. У меня нет проблем с увеличением тайм-аута на ожидаемое высказывание, пока вывод надежен. Теперь я вижу, нет тайм-аута с неполным выходом.

child.sendline(action)
child.expect(prompt_keys)
action_output = str(child.after)    # Captures the output
# print action_output   # Uncomment for debugging grabbed output
output_file.write(action_output + "\n\n\n") # Write the output to file
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top