Я пытался написать сценарий, чтобы упростить набор моей работы. Я попробовал это с командами оболочки, но код выглядит слишком прямолинейным и, если честно, слишком любительским. Я пытаюсь изучить Python для написания сценариев, и с вашей помощью я надеюсь, что эта моя проблема может превратиться в объяснительную практику.
Ниже приведен код оболочки, который я написал:
#!/usr/bin/expect
spawn telnet IPaddress
sleep 0.1
expect "Enter username and password"
send "username password \n"
sleep 0.1
send "debug; \n"
sleep 0.1
send "def t1 suspend_loader \n"
expect "enter subcommands"
send "traceback \n \n;"
sleep 1
send "act t1 \n"
sleep 0.1
send "quit \n"
sleep 0.1
send "stor2tst;audit_modules \n"
expect "PS Checksum audit completed"
send "quit \n"
sleep 0.1
send "debug"
sleep 0.1
send "print t1 \n"
sleep 0.5
send "quit \n"
sleep 0.1
send "logutil;open MOD;back all;quit \n"
sleep 0.1
send "debug \n"
sleep 0.1
send "di modules:pr.514 d 1 (&0) char n=68 \n"
send "quit \n"
sleep 1
send "quit \n"
send "logout \n"
interact
Как вы уже могли догадаться, этот код предназначен для конкретного интерфейса коммутатора. Имя пользователя и пароль приходят в одну строку. Существуют определенные уровни оболочки (например, уровень отладки), которые мне требуются для выполнения нескольких команд. Я также использовал модуль ожидания здесь, но я думаю, что он просто проходит без проверки строки в ожидаемой части.
ЧТО Я ПЫТАЮСЬ ДЕЛАТЬ?
Мне нужно подключиться по telnet к списку известных IP-адресов (20 серверов).
На всех серверах одинаковые имя пользователя и пароль.
Мне нужно чтобы выполнить этот набор команд на каждом сервере и вернуть любые выходные данные в отдельные файлы журналов в указанном каталоге (например, /tmp/dir).
Кроме того, для выполнения некоторых команд требуется "двойной ввод"! Вот почему я использовал \n\n после команды traceback.
Будем признательны за любую помощь.
Заранее спасибо,
expect
и научитесь любить язык TCL, который, как и Python, является динамическим языком сценариев, поддерживающим делать все, что вам нужно (включая цикл, обработку аргументов командной строки и т. д.). - person larsks   schedule 26.08.2015telnetlib
это правильный путь. stackoverflow.com/questions/10952514/telnetlib-python-example - person Joseph Farah   schedule 26.08.2015