У меня есть простой скрипт для подключения SSH к сетевому коммутатору, выполнения команд и сохранения вывода в файл. Он отлично работает для вывода, который отображается мгновенно, но когда я запускаю «show iproute», он не фиксирует вывод. Причина в том, что когда я запускаю ту же команду на коммутаторе напрямую, она думает 5-6 секунд, показывает кучу строк и снова думает, показывает еще пару строк и затем заканчивается. Это не ожидание должным образом выполнения всей команды, что у меня проблема с исправлением:
str_prompt = ' # '
command = "sh iproute"
device_name = "switch1.test.com"
# Spawn SSH session
ssh_command = 'ssh {}@{}'.format(username, device_name)
session = pexpect.spawn(ssh_command, timeout=5)
# Send the password
session.sendline(password)
# Expect the switch prompt (successful login)
expect_index = session.expect([pexpect.TIMEOUT, str_prompt])
# Success
if expect_index == 1:
# Disable clipaging so that all the output is shown (not in pages) | same as term len 0 in Cisco
session.sendline('disable clip')
# Expect the switch prompt if command is successful
expect_index = session.expect([pexpect.TIMEOUT, str_prompt])
# Send show iproute command
session.sendline(command)
# < This is where it needs to wait >
#session.expect(pexpect.EOF) - Tried this and wait() but that broke the scipt
#session.wait()
# Expect the switch prompt if command is successful
session.expect(str_prompt)
# Save output of "sh iproute" to a variable
output = session.before
# Save results to a file
fp = open(host + '-route.txt', "w")
fp.write(output)
fp.close()
Вот пример вывода. В выходных данных есть «#», но не «#».
#oa 10.10.10.0/24 10.0.0.1 4 UG-D---um--f- V-BB1 99d:0h:14m:49s
#oa 10.10.20.0/24 10.0.0.1 4 UG-D---um--f- V-BB2 99d:0h:14m:49s
#oa 10.10.30.0/24 10.0.0.1 4 UG-D---um--f- V-BB3 99d:0h:14m:49s
#oa 10.10.40.0/24 10.0.0.1 4 UG-D---um--f- V-BB4 99d:0h:14m:49s
and many more line ....
Любая помощь будет оценена. Спасибо
Редактировать: я добавил sleep(60), и это, похоже, помогло, но я не хочу его использовать, так как отправляю несколько команд, и некоторые из них очень быстрые. Я не хочу ждать 1 минуту для каждой команды, скрипт будет работать вечно.