Следующий код извлекает IP-адрес (маршрутизатор Cisco) из текстового файла, выполняет указанную команду и выводит результат в файл. Здесь я пытаюсь сначала проверить доступность устройства с помощью PING, при успешном ответе на ping должны быть выполнены команды ответа, иначе следует вывести ошибку и перейти к следующему хосту. Пожалуйста, помогите мне, как этого добиться. Я новичок.
Вот мой код,
import paramiko
import sys
import os
import subprocess
with open('C:\Python27\Testing\Fetch.txt') as f:
for line in f:
line = line.strip()
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dssh.connect(line, username='cisco', password='cisco')
stdin, stdout, stderr = dssh.exec_command('sh ip ssh')
mystring = stdout.read()
print mystring
f = open('C:\Python27\Testing\output.txt', 'a+')
f.write(mystring)
f.close()
dssh.close()
Входной файл Fetch.txt выглядит следующим образом:
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
Я просмотрел форум и добился примерно того, что искал. Если все IP-адреса доступны в этом списке, скрипт работает нормально. Но если какой-либо из IP-адресов недоступен, сценарий резко завершается, не переходя к следующему IP-адресу. Я понимаю, что делаю что-то не так, мне просто нужна небольшая помощь, чтобы это заработало..... Пожалуйста, помогите.
import paramiko
import sys
import os
import subprocess
dssh = paramiko.SSHClient()
dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
with open('C:\Python27\Testing\Fetch.txt') as f:
for line in f:
line = line.strip()
with open(os.devnull, "wb") as limbo:
ip = line
result = subprocess.Popen(["ping", "-n", "1", "-w", "200", ip],
stdout=limbo, stderr=limbo).wait()
if result:
print ip, "Down"
else:
print ip, "Reachable"
dssh.connect(line, username='cisco', password='cisco')
stdin, stdout, stderr = dssh.exec_command('sh ip ssh')
mystring = stdout.read()
print mystring
f = open('C:\Python27\Testing\output.txt', 'a+')
f.write('\n' + ip + '\n' + mystring)
f.close()
dssh.close()