Как перебрать список IP-адресов, по одному на строку в Python

У меня есть код ниже, который откроет файл.txt, содержащий IP-адреса, а затем подключится к устройству и перехватит вывод команды, затем распечатает вывод в файл и сообщит, что все работает.

Я не могу заставить его циклически проходить через серию IP-адресов и возвращать вывод команды для нескольких устройств. Я получаю сообщение об ошибке тайм-аута сценария, когда добавляю более одного IP-адреса в список.txt. Это доказывается добавлением одного и того же адреса дважды, поэтому я знаю, что адреса хороши, по сравнению с тем, когда в файле присутствует только один адрес, и он работает без всяких проблем.

Я ищу способ перебрать 10 IP-адресов и выполнить те же команды:

from __future__ import print_function
from netmiko import ConnectHandler

import sys
import time
import select
import paramiko
import re
fd = open(r'C:\Users\NewdayTest.txt','w') 
old_stdout = sys.stdout   
sys.stdout = fd 
platform = 'cisco_ios'
username = 'Username'
password = 'Password'

ip_add_file = open(r'C:\Users\\IPAddressList.txt','r') 

for host in ip_add_file:
    device = ConnectHandler(device_type=platform, ip=host, username=username, password=password)
    output = device.send_command('terminal length 0')
    output = device.send_command('enable')
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW RUN OUTPUT......................\n')
    output = device.send_command('sh run')
    print(output)
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW IP INT BR OUTPUT......................\n')
    output = device.send_command('sh ip int br')
    print(output) 
    print('##############################################################\n')

fd.close()

1 ответ

Решение

Имейте в виду, что в каждой строке будут новые IP-адреса.

И вы не пишете в файл ciscoOutput, вы можете использовать команду fd.write('text') для этого.

from __future__ import print_function
from netmiko import ConnectHandler

import sys
import time
import select
import paramiko
import re
fd = open(r'C:\Users\LocationOfMyFile\CiscoOutput.txt','w') 
old_stdout = sys.stdout   
sys.stdout = fd 
platform = 'cisco_ios'
username = 'My Username'
password = 'My Password'

ip_add_file = open('file_name.txt','r') 

for host in ip_add_file:

    device = ConnectHandler(device_type=platform, ip=host, username=username, password=password)


    output = device.send_command('show version')
    print(output)


    output = device.send_command('terminal length 0')
    print(output)


    output = device.send_command('sh ip int br')
    print(output)


    output = device.send_command('show interfaces GigabitEthernet0/1')
    print(output)

fd.close()
Другие вопросы по тегам