我有一个要返回的SNMP OID列表,但是我不能用该变量代替命令中的OID。我什至尝试将变量包装到一个eval中,并与ObjectType和ObjectIdentity结合在一起,但没有成功。
我已经从here那里获取了基本配置模板,并为我的目的进行了编辑。
这是完整的配置块:
cmdGen = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
cmdgen.UsmUserData(user,
authKey=authKe,
privKey=privKe,
authProtocol=authProto,
privProtocol=privProto,
securityEngineId=None
),
cmdgen.UdpTransportTarget((sHost, 161)),
(_OID),
以下所有替换代替(_OID),
:
cmdgen.MibVariable('1.3.6.1.2.1.1.1.0'),
cmdgen.MibVariable('1.3.6.1.2.1.1.6.0'),
cmdgen.MibVariable('1.3.6.1.2.1.1.5.0'),
cmdgen.MibVariable('1.3.6.1.2.1.1.4.0'),
cmdgen.MibVariable(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)),
'1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0', '1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0',
以上所有内容可以单独或以任何其他组合的形式添加为完整的块。 _OID变量采用OID列表,并将其转换为如下所示的字符串:'1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0', '1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0',
。我怀疑甚至可以直接使用该列表。
我知道我可以将getCmd封装在for
中,并且,只要我事先实例化引擎,就不会对性能造成任何影响,如here所述,但是我喜欢cmdgen方法因为它很干净,我怀疑包装起来会很贵。
如何使用_OID变量动态设置所需的OID?
pysnmp版本4.4.4
答案 0 :(得分:2)
如果序列中有位置参数,只需使用*
运算符将它们解压缩为函数的位置参数即可。
_oids = ('1.3.6.1.2.1.1.1.0', '1.3.6.1.2.1.1.4.0',
'1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.6.0')
cmdGen.getCmd(
cmdgen.UsmUserData(
user,
authKey=authKe,
privKey=privKe,
authProtocol=authProto,
privProtocol=privProto
),
cmdgen.UdpTransportTarget((sHost, 161)),
*[ObjectType(ObjectIdentity(oid)) for oid in _oids]
)