Python - Telnet на маршрутизаторах и список Полный результат (ударов пробел)
Вопрос
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