pySnmp异步对同步的反应不同

时间:2013-04-17 09:09:49

标签: python pysnmp

我有两个几乎相同的方法调用,它们返回不同的结果

from pyasn1.type import univ
from pysnmp.entity.rfc3413.oneliner import cmdgen
def printResult(*result):
    print str(result)

print cmdgen.CommandGenerator().nextCmd(cmdgen.CommunityData('agent', 'public', 1), cmdgen.UdpTransportTarget(('172.16.1.15', 161)), (univ.ObjectIdentifier(("1.3.6.1.4.1.5528.100.4.1.1.1.10"),)))

getCmdGen = cmdgen.AsynCommandGenerator()
getCmdGen.nextCmd(cmdgen.CommunityData('agent', 'public', 1), cmdgen.UdpTransportTarget(('172.16.1.15', 161)), (univ.ObjectIdentifier(("1.3.6.1.4.1.5528.100.4.1.1.1.10")),), (printResult, (None,)))
getCmdGen.snmpEngine.transportDispatcher.runDispatcher()

打印出来:

(None, Integer('noError'), Integer(0), [[(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1095346743), Counter32(1095346743))], [(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1382714849), Counter32(1382714849))]])
(695125368, None, Integer('noError'), Integer(0), [[(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1095346743), Counter32(1095346743))]], None)

如果仔细观察,你会看到第一个正确返回2个项目,第二个只返回1:

[[(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1095346743), Counter32(1095346743))], [(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1382714849), Counter32(1382714849))]]

VS

[[(ObjectName(1.3.6.1.4.1.5528.100.4.1.1.1.10.1095346743), Counter32(1095346743))]]

编辑。找出为什么在某些情况下我得到一个奇怪的错误,但是没有解决其余的问题

1 个答案:

答案 0 :(得分:1)

如果回调函数没有返回任何内容,它将停止。 只有当回调函数返回1(或者评估为True的东西)时,才会请求下一个值。