当我使用时:
build-pysnmp-mib -o iSCSI_RAID_Rack-1.2.1.py iSCSI_RAID_Rack-1.2.1.mib
要将.mib文件转换为.py文件,它会将其转换为没有错误。当我尝试在python上加载文件时,我收到以下错误:
错误:
“NameError:名称'MibScalar'未定义
完全错误:
文件“C:\ Python27 \ lib \ site-packages \ pysnmp \ smi \ builder.py”,第259行,在loadModules中 'MIB模块\“%s \”加载错误:%s'%(modPath,traceback.format_exception(* sys.exc_info())) SmiError:MIB模块“C:\ Python27 \ snmp \ MIB \ iSCSI_RAID_Rack-1.2.1.pyc”加载错误:['Traceback(最近一次调用最后一次):\ n','File“C:\ Python27 \ lib \ site -packages \ pysnmp \ smi \ builder.py“,第255行,在loadModules \ n exec(modData,g)\ n','文件”C:\ Python27 \ snmp \ MIB \ iSCSI_RAID_Rack-1.2.1.py“,第27行,在\ n sys_status_temp = MibScalar((1,3,6,1,4,1,22274,1,1,1,2),DisplayString())。setMaxAccess(“readonly”)。setLabel(“sys -status-temp“)\ n',”NameError:name'MibScalar'未定义\ n“]
CODE:
def addFile(dir, file):
mibBuilder = cmdGen.snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder
mibSources = mibBuilder.getMibSources() + (
builder.DirMibSource(dir),
)
mibBuilder.setMibSources(*mibSources)
mibBuilder.loadModules(file)
答案 0 :(得分:0)
您的iSCSI_RAID_Rack-1.2.1.py文件可能不完整。这可能是由smidump(从build-pysnmp-mib调用)失败引起的。
确保iSCSI_RAID_Rack-1.2.1.mib导入的所有MIB都在smidump搜索路径中。
另一个想法是手动运行smidump(以与build-pysnmp-mib调用相同的方式)来查看它是否因错误的MIB语法而抱怨。
答案 1 :(得分:0)
我有同样的问题,我直接用smidump尝试了,但我没有成功。
我在这里找到的问题和答案有点旧,现在我们有了PySMI包。这个软件包通常可以使用pip,它附带一个名为mibdump.py的命令行工具。
当我第一次尝试使用mibdump.py时,我遇到了脚本中使用的python解释器版本的问题。所以我自己更改了它,指向我系统中一个有效的python解释器。
之后,我安装了download-mibs工具(在Ubuntu存储库上的snmp-mibs-downloader)。此工具会自动下载翻译通常所需的一些基本MIB。您可以在/ etc / snmp-mibs-downloader(至少在Mint Linux上)配置MIB下载器,在那里您可以看到MIB的下载位置。
然后我只是:
mibdump.py --destination-directory=<target files directory> --mib-source=<place where the source MIBs are> --mib-source=/var/lib/mibs/iana --mib-source=/var/lib/mibs/ietf <name MIB to be translated>
请注意,我使用“--mib-source”指向我的自定义MIB所在的位置,并指向下载基本MIB的位置。
答案 2 :(得分:0)
如果 mibdump.py 不起作用,最新的 pysnmp 会在编译时为您的自定义 mib 文件创建 *.py。 只需编译以下代码,您的 custom_mib.py 文件将位于 ~/.pysnmp/mibs 文件夹
snmpEngine = engine.SnmpEngine()
snmpContext = context.SnmpContext(snmpEngine)
mibBuilder = snmpContext.getMibInstrum().getMibBuilder()
compiler.addMibCompiler(mibBuilder, sources = ['/home/mib_file/']) # at this path you should keep your own mib file and all others dependent library mib files
mibBuilder.addMibSources(builder.DirMibSource('/home/mib_file/'))
mibBuilder.loadModules('MY-SMI') # MY-SMI.mib is the mib file prepared by me
mibBuilder.unloadModules()
print('done')
如果您保留您的 mib 文件并且所有依赖的 mib 都位于正确的位置(如上面指定的路径),那么 loadModules() 将为您生成 *.py 文件。