完成SNMP事务并将结果存储在varBinds中之后,我想将MIB和值分配给它们自己的变量以进行进一步处理。当我尝试时:
for x in varBinds
print x
OID已翻译,但是,当我尝试时,我需要将mib和值分配给各个变量:
for oid, val in varBinds
print oid, val
OID未翻译。我还没有弄清楚如何使用.loadMibs
,所以我创建了一个函数来转换在oid
上调用的OID:
T = oid2mib(oid)
def oid2mib(oid_str):
oid_tuple = tuple(oid_str)
mib_builder = builder.MibBuilder()
compiler.addMibCompiler(mib_builder)
mib_builder.loadModules('SNMPv2-MIB')
mib_view = view.MibViewController(mib_builder)
a, b, c = mib_view.getNodeName(oid_tuple)
return b[-1] + '.' + '.'.join(map(str, c))
print('Mib:%s Value:%s' % (T, val))
这有效并且将我的OID转换为MIB,但是我想知道这是否是实现期望结果的最有效方法?也许.loadMibs
可能更有效率?
更新
我刚刚尝试了以下方法,
for x in varBinds
a, b = str(x).split('=')
print(a.rstrip(), b.rstrip(), sep=' => ')
此方法的优缺点是什么?
答案 0 :(得分:0)
由于您在第一种情况下翻译了var-bindings,因此我怀疑您已经加载了正确的MIB。
所以尝试一下:
for oid, val in varBinds
a, b = str(oid), str(val)
print(a, b, sep=' => ')
如果碰巧遇到未为其加载MIB的OID,则需要致电loadMibs()。