2

当我使用:

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 module "C:\Python27\snmp\MIB\iSCSI_RAID_Rack-1.2.1.pyc" 加载错误: ['Traceback (last last最近调用):\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' is not defined\n"]

代码:

def addFile(dir, file):
    mibBuilder = cmdGen.snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder

    mibSources = mibBuilder.getMibSources() + (
                                    builder.DirMibSource(dir),
                                    )

    mibBuilder.setMibSources(*mibSources)
    mibBuilder.loadModules(file)
4

3 回答 3

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 语法。

于 2014-02-25T22:19:51.917 回答
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 下载到的位置。

于 2016-10-14T16:14:52.560 回答
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 文件。

于 2021-06-01T12:23:13.807 回答