首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行python脚本解析IOS配置文件时出现错误消息

运行python脚本解析IOS配置文件时出现错误消息
EN

Stack Overflow用户
提问于 2015-09-09 05:48:07
回答 1查看 437关注 0票数 2

我已经能够编写一个python脚本来解析IOS配置文件,但是我得到了一个错误。

以下是脚本:

代码语言:javascript
复制
import glob, os
from ciscoconfparse import CiscoConfParse
os.chdir("T:/")
for cfgfile in glob.glob("*-confg"):
    parse = CiscoConfParse("T:/" + cfgfile, factory=True, syntax='ios')
    host = parse.find_objects_dna(r'Hostname') 
    interfaces_with_helpers = parse.find_parents_w_child( "^interf", "ip helper-address 10.194.35.201")
    if interfaces_with_helpers:
        print (host[0].hostname)
    for interface in interfaces_with_helpers:
        print (interface)

当我运行脚本时,它似乎运行得很好,然后得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 186, in __init__ CiscoConfParse=self)
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2209, in __init__
self._list = self._bootstrap_obj_init(data)
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2433, in _bootstrap_obj_init
syntax='ios')
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2982, in ConfigLineFactory
comment_delimiter=comment_delimiter) # instance of the proper subclass
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\models_cisco.py", line 1758, in __init__raise ValueError
ValueError
>>>
EN

回答 1

Stack Overflow用户

发布于 2015-09-09 05:58:52

在我看来,这是一种意想不到的配置文件格式。如果您查看CiscoConfParse库中抛出ValueError的源代码:

代码语言:javascript
复制
    REGEX = r'^aaa\sgroup\sserver\s(?P<protocol>\S+)\s(?P<group>\S+)$'
    mm = re.search(REGEX, self.text)
    if not (mm is None):
        groups = mm.groupdict()
        self.protocol = groups.get('protocol', '')
        self.group = groups.get('group', '')
    else:
        raise ValueError

它看起来像是偶然发现了一个配置文件,在该文件中它希望该行满足正则表达式^aaa\sgroup\sserver\s(?P<protocol>\S+)\s(?P<group>\S+)$,但失败了。

当您迭代glob.glob("*-confg")的结果时,您需要打印出当前正在处理的文件名,以查看哪个文件格式不正确。然后更正此配置文件,或缩小您要解析的配置文件的范围。

您也可以忽略该错误,如下所示:

代码语言:javascript
复制
import glob, os
from ciscoconfparse import CiscoConfParse
os.chdir("T:/")
for cfgfile in glob.glob("*-confg"):
    try:
        parse = CiscoConfParse("T:/" + cfgfile, factory=True, syntax='ios')
    except ValueError:
        print "Malformed config file found. Skipping " + cfgfile
        continue
    host = parse.find_objects_dna(r'Hostname') 
    interfaces_with_helpers = parse.find_parents_w_child( "^interf", "ip helper-address 10.194.35.201")
    if interfaces_with_helpers:
        print (host[0].hostname)
    for interface in interfaces_with_helpers:
        print (interface)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32467785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档