我如何 return 从使用 PySNMP 完成的循环中获得两个值?

How do I return two values gotten from a loop done with PySNMP?

我是 PySNMP 的新手并且 Python 但对它充满热情。

我有一个取自 PySNMP 文档的脚本,我已将其设为一个名为 SnmpGetNext() 的 python 函数。

最后我想做的是从 nextCmd 获取两个 OIDS,这应该给我 1.3.6.1.2.1.2.2.1.14 .1 和 .2

当我这样做时,它会获取两个值并将其保存到字典中,这很棒。

for varBindTableRow in varBindTable:
    for name, val in varBindTableRow:
        result2 = {}

        result2['OID']= str(val)
        print(result2

但是我希望能够 return 它们并稍后使用此函数将其与更多 OID 一起使用,如果我 return result2 这只会 return 我的第一个值。

我试过通过字典将 OID 作为字符串传递给它。

from pysnmp.entity.rfc3413.oneliner import cmdgen

host = "demo.snmplabs.com"
community = "public"
test1 = ".1.3.6.1.2.1.2.2.1.14"

def SnmpGetNext(host,community,oid):
    errorIndication, errorStatus, errorIndex, \
                     varBindTable = cmdgen.CommandGenerator().nextCmd(
        cmdgen.CommunityData('test-agent', community),
        cmdgen.UdpTransportTarget((host, 161)),
        (oid),
        )

    if errorIndication:
        print (errorIndication)
    else:
        if errorStatus:
            print ('%s at %s\n' % (
                errorStatus.prettyPrint(),
                errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
                ))
        else:
            for varBindTableRow in varBindTable:
                for name, val in varBindTableRow:
                    result2 = {}

                    result2['OID']= str(val)
                    print(result2)
                    #return (name.prettyPrint(),val.prettyPrint())
                    #print ('%s = %s' % (name.prettyPrint(), val.prettyPrint()))


result = {}
result['test1']= SnmpGetNext(host,community,test1)
print(result)

期望的结果将由 运行

SnmpGetNext(主机、社区、测试 1) 获得:

1.3.6.1.2.1.2.2.1.14.1 1.3.6.1.2.1.2.2.1.14.2

所以基本上我不得不使用 yield 而不是 return,现在它完美无缺。