2015-11-03 51 views
1

我正在尝试什么似乎是一个简单的操作 - 解析思科路由器输出使用简单的字符串函数(如'拆分')。但是,我不断收到一个错误,指出一个索引超出范围,并没有看到为什么。索引超出范围时分割字符串

以下是我与,简单的“显示IP INT短暂的”输出开始:

Interface     IP-Address  OK? Method Status    Protocol 
GigabitEthernet0/0   unassigned  YES NVRAM up     up  
GigabitEthernet0/0.50  10.78.1.205  YES NVRAM up     up  
GigabitEthernet0/1   10.233.112.17 YES NVRAM up     up  
GigabitEthernet0/2   10.233.112.41 YES NVRAM up     up  
GigabitEthernet0/3   10.233.112.50 YES NVRAM up     up  
Loopback0     10.233.112.130 YES NVRAM up     up  
Tunnel0     10.233.112.130 YES unset up     up  
sdf-a-wan-rt-02#exit 

,这里是我想对它运行的代码:

links = [] 
lines = output.split('\n') 
for item in lines: 
    fields = item.split() 
    interface = fields[0] 
    ipaddress = fields[1] 
    linkstate = fields[4] 
    prtcstate = fields[5] 
    links.append([interface,ipaddress,linkstate,prtcstate]) 
print links 

这里被错误我得到:

Traceback (most recent call last): 
File "C:\Users\dtruman\Documents\PROJECTS\DEVOPS - ITOC CoE\NETWORK AUTOMATION\parse_output.py", line 32, in <module> 
ipaddress = fields[1] 

IndexError:列表索引超出范围

+5

它看起来像'output',“sdf-a-wan-rt-02#exit”的最后一行,不包含六个空格分隔的单词,因为您似乎期待着。 – user5459381

+1

你看过'田地',看它是否包含你的想法? –

+0

我认为你正在做些什么,user5459381。也许我应该看看通过字段长度解析这种输出,而不是试图在字符上分割? – riddleOFst33l

回答

0

你基本上已经拥有它了,但是你需要添加一个完整性检查,以确保你所获得的数据是你期望的。我会这样做:

links = [] 
lines = output.split('\n') 
for item in lines: 
    fields = item.split() 
    # make sure data is the proper length so you don't go out of bounds 
    if len(fields) != 6: 
     continue 
    interface = fields[0] 
    ipaddress = fields[1] 
    linkstate = fields[4] 
    prtcstate = fields[5] 
    links.append([interface,ipaddress,linkstate,prtcstate]) 
print links 

还有其他方法可以做到这一点,但这是我能想到的第一个方法。这可以确保在填充任何数据之前,表中已填充表中的所有6列。

+0

谢谢!是的,就是这样 - 最后两行没有预期的字段数,所以我的代码被挂在那里。 – riddleOFst33l

相关问题