PySNMP错误:pysnmp.smi.error.SmiError
我在一台运行Windows XP的电脑上运行一个Python程序。每次我运行这个程序时,都会出现以下错误:
File "C:\Python27\lib\pysnmp\smi\builder.pyt, line 230, in loadModules...
pysnmp.smi.error.SmiError: MIB file "SNMPv2-MIB.py[co]" not found in search path
文件SNMPv2-MIB.py现在位于C:\Python27\Lib\pysnmp\smi\mibs
这个位置。有没有人知道我该怎么解决这个问题?
5 个回答
2
你无法加载MIB文件。
你能检查一下:
>>> print builder.MibBuilder().getMibPath()
通常情况下,这应该没问题,因为MIB实例应该在
pysnmp/smi/mibs/instances
错误发生的代码在builder.py中
if not self.__modSeen.has_key(modName):
raise error.SmiError(
'MIB file \"%s\" not found in search path' % (modName and modName + ".py[co]")
)
通常在调用loadModules之前,先在mibBuilder实例上调用setMibPath就能解决这个问题。
因为你得到的路径是
C:\Python27\lib\pysnmp\smi\mibs\instances,
C:\Python27\lib\pysnmp\smi\mibs,
C:\Python27\lib\pysnmp_mibs
为什么不把文件移动到这些目录之一呢? 你现在文件所在的位置
- C:\Python27\Lib\pysnmp\smi\mibs
并不在你通过builder.MibBuilder().getMibPath()得到的路径中。
3
我刚遇到同样的问题。我提交了一个bug报告,并附上了一个修复方案:https://sourceforge.net/tracker/?func=detail&aid=3204704&group_id=14735&atid=114735
正如Sivakumar所说,问题出现的原因是pysnmp在寻找后缀为.pyc或.pyw的MIB文件。pysnmp通过imp.get_suffixes()这个函数来获取这些后缀。根据pysnmp处理这个函数返回的后缀的方式,.pyw的后缀会覆盖掉.py的后缀。我提出的修复方案就是简单地忽略.pyw这个后缀。
如果你是从.egg文件安装这个库,应该就没问题,因为.egg文件里包含了编译好的(pyc)MIB文件。
7
如果你发现缺少一个mib文件,首先要确保你已经运行过 pip install pysnmp-mibs
,前提是你之前使用过 pip install pysnmp
。