Я использую netmiko для доступа к каждому из моих устройств Juniper и Cisco и запускаю свои собственные команды для цикла.Я могу получить доступ и запустить команды и распечатать вывод в каждом цикле.Я хочу, чтобы каждый вывод был сохранен в виде файла и назовите его на основе IP-адреса.Я протестировал его с помощью sys.stdout = open (), но он мог печатать и создавать только для одного устройства и возвращать ошибку ввода-вывода, которая, как я полагал, связана со способом, которым я открываю / создаю файл в цикле.
Получить вывод на печать устройств и создать файл и сохранить файл на основе IP-адреса на каждом для цикла.
Это мой код.
for device in devices['mydevice']:
try:
print('~' * 100)
print('Connecting to device:',device['ip'])
connection = netmiko.ConnectHandler(**device)
if device['device_type'] == "juniper_junos" :
print('**********SCAN JUNIPER DEVICES**********')
sys.stdout=open("Juniper.txt","a")
print(device['ip'])
print(connection.send_command('show arp'))
sys.stdout.close()
os.rename('Juniper.txt', device['ip'])
elif device['device_type'] == "cisco_ios" :
print('**********SCAN CISCO DEVICES**********')
sys.stdout=open("Cisco.txt","a")
print(device['ip'])
print(connection.send_command('show cdp neighbors'))
print(connection.send_command('show version'))
sys.stdout.close()
os.rename('Cisco.txt', device['ip'])
else :
print("No valid device type scan")
connection.disconnect()
except netmiko_exceptions as e:
print('Failed to ', device['ip'], e)
Я добавляю sys.stdout = open () и sys.stdout.close (), и между этими строками находится команда устройства.В конце цикла я переименовываю файл на основе IP-адреса.
Этот код может создать только 1 файл из 1.1.1.1, а затем вернуть ошибку следующим образом
Connecting to device: 1.1.1.1
**********SCAN CISCO DEVICES**********
Traceback (most recent call last):
File "mydevicessh.py", line 20, in <module>
print('~' * 100)
ValueError: I/O operation on closed file.
Я так думаю, потому что так я открываю и закрываю файл.Пожалуйста, направляйте и помогайте дальшеСпасибо
Для каждого IP-доступа он будет запускать команды и создавать файл и называть его на основе IP-адреса.например, у меня есть 3 устройства Cisco и 2 устройства Juniper, на каждом цикле for он будет читать список ip и запускать команду show arp для устройств juniper, печатать все выходные данные команды, а затем создавать файлы, такие как 1.1.1.1.txt и 1.1..1.2.txt, а затем для устройств cisco он запустит команду show cdp соседей и покажет версию, распечатает все выходные команды и создаст файл и имя 1.1.1.3.txt, 1.1.1.4.txt и 1.1.1.5.txt
Я тестирую его ниже с помощью open (), и он запускает все команды и сохраняет файл только для одного устройства 1.1.1.1 и ошибки ввода-вывода
with open('cisco.txt', 'w') as x:
sys.stdout = x
file = open('cisco.txt','w')
file.write(connection.send_command('show cdp neighbors'))
file.write(connection.send_command('show arp'))
Я получаю ту же ошибку ' ValueError:Операция ввода / вывода для закрытого файла. '