pysnmp cmdGen如何从变量馈送oid

2024-06-30 17:02:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个要返回的snmpoid列表,但是我不能用该变量替换命令中的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),所有工作:

^{pr2}$

以上所有内容都可以单独添加为一个完整的块,也可以是任何其他组合。iod变量接受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',。我怀疑甚至有一种方法可以直接使用这个列表。在

我知道我可以在for中包装getCmd来完成这项工作,而且,只要事先实例化引擎,性能就不会受到太大的影响,这是有文档记录的here,但我喜欢cmdgen方法,因为它是干净的,我怀疑包装这将是昂贵的。在

如何使用\u OID变量动态设置所需的OID?在

pysnmp版本4.4.4


Tags: 方法命令目的模板列表hereevaloid
1条回答
网友
1楼 · 发布于 2024-06-30 17:02:18

如果序列中有位置参数,只需使用*运算符将它们解压为函数的位置参数。在

_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]
)

相关问题 更多 >