2013-04-17 114 views
0

有不同的反應我有兩個幾乎相同的方法調用和他們返回不同的結果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

如果回調函數沒有返回,它將停止。 只有當回調函數返回1(或者評估爲True的東西)時,纔會請求下一個值。