我如何 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,现在它完美无缺。
我是 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,现在它完美无缺。