跳出制表符时出现异步getNext错误

2024-09-29 23:23:19 发布

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

我正在使用GetNext操作中的一个示例来进行树的SNMPWalk。我使用异步变量来收集OID-

# GETNEXT Command Generator
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto import rfc1902

# ( ( authData, transportTarget, varNames ), ... )
targets = (
    # 1-st target (SNMPv1)
    ( cmdgen.CommunityData('test-agent-1', 'public'),
      cmdgen.UdpTransportTarget(('localhost', 161)),
      (rfc1902.ObjectName((1,3,6,1,2,1)), rfc1902.ObjectName((1,3,6,1,3,1)))),
    # 2-nd target (SNMPv2c)
    ( cmdgen.CommunityData('test-agent-2', 'public', 1),
      cmdgen.UdpTransportTarget(('localhost', 161)),
      (rfc1902.ObjectName((1,3,6,1,2,1,2)),) ),
    )

def cbFun(
    sendRequestHandle, errorIndication, errorStatus, errorIndex,
    varBindTable, (varBindHead, authData, transportTarget)
    ):
    if errorIndication:
        print 'SNMP engine error', errorIndication
        return 1
    if errorStatus:
        print 'SNMP error %s at %s' % (errorStatus, errorIndex)
        return 1
    varBindTableRow = varBindTable[-1]
    for idx in range(len(varBindTableRow)):
        name, val = varBindTableRow[idx]
        if val is not None and varBindHead[idx].isPrefixOf(name):
            # still in table
            break
    else:
        print 'went out of table at %s' % (name, )
        return

    for varBindRow in varBindTable:
        for oid, val in varBindRow:
            if val is None:
                print oid.prettyPrint()
            else:
                print '%s = %s' % (oid.prettyPrint(), val.prettyPrint())

    return 1 # continue table retrieval

cmdGen  = cmdgen.CommandGenerator()

for authData, transportTarget, varNames in targets:
    cmdGen.asyncNextCmd(
        authData, transportTarget, varNames,
        # User-space callback function and its context
        (cbFun, (varNames, authData, transportTarget))
        )

cmdGen.snmpEngine.transportDispatcher.runDispatcher()

我得到了我需要的OID;但是当它从表中输出并从cbFun返回时,最后一行中的调度器抛出一个错误,我无法解决,输出看起来像-

^{pr2}$

Tags: inforreturnifvalprinterrorindicationcmdgen
2条回答

这似乎是在请求重试时发生的。所以这可能与退出谈判无关。在

我建议从SourceForge的CVS升级pysnmp安装,希望它已经修复了。否则,请向pysnmp-users@lists.sourceforge.net在

更改CommunityData字符串就做到了(我不知道为什么)

以前

cmdgen.CommunityData('test-agent-1', 'public'), 

之后

^{pr2}$

相关问题 更多 >

    热门问题