You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:用pysnmp-lextudio的walkCmd遍历指定OID子节点遇错误求示例

解决pysnmp-lextudio walkCmd使用问题及遍历指定OID子节点示例

错误原因

await关键字只能在异步函数(用async def定义)内部使用,直接在脚本顶层或命令行中调用会触发语法错误。

正确遍历指定OID直接子节点的示例代码

以下代码使用walkCmd遍历ciscoSmartLicMIB(.1.3.6.1.4.1.9.9.831)的直接子OID,对应旧方法中lexicographicMode=False的行为:

from pysnmp.hlapi.asyncio import *
import asyncio

async def main():
    # 配置SNMP参数并执行walk
    errorIndication, errorStatus, errorIndex, varBinds = await walkCmd(
        SnmpEngine(),
        CommunityData('public'),  # 替换为设备实际的社区字符串
        UdpTransportTarget(('your_device_ip', 161)),  # 替换为设备IP和SNMP端口
        ContextData(),
        ObjectType(ObjectIdentity('.1.3.6.1.4.1.9.9.831')),
        lexicographicMode=False,  # 仅返回基础OID的直接子节点
        lookupMib=False  # 直接输出OID字符串,关闭MIB符号解析(可选)
    )

    # 处理结果
    if errorIndication:
        print(errorIndication)
    elif errorStatus:
        print(f'{errorStatus.prettyPrint()} at {errorIndex and varBinds[int(errorIndex)-1][0] or "?"}')
    else:
        for oid, value in varBinds:
            print(f'{oid.prettyPrint()} = {value.prettyPrint()}')

if __name__ == '__main__':
    asyncio.run(main())

代码说明

  • 必须将await walkCmd()放在async def定义的异步函数内,通过asyncio.run()启动异步程序(Python 3.7+支持)
  • lexicographicMode=False:限制仅返回指定基础OID的直接子节点,不会递归遍历更深层级
  • lookupMib=False:输出原始OID字符串,若需要显示MIB符号名(如ciscoSmartLicMIB::xxx)可移除该参数
  • 需替换代码中的社区字符串和设备IP为实际配置

遍历所有子OID(含深层节点)

如果需要遍历基础OID下的所有层级子节点,只需移除lexicographicMode=False参数即可。

内容的提问来源于stack exchange,提问作者Gary Giesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:41:08