使用 pysnmp 获取输出

问题描述 投票:0回答:2

如果这是这么简单的事情,请原谅我,但我对 Python、pysnmp 和 SNMP 很陌生。

我正在尝试使用 SNMP 运行一些非常简单的查询,以从设备获取配置信息,并且出于某种原因遵循文档。

即使我可以通过 snmpwalk 遍历 SNMP,但我没有得到任何输出,并且谷歌搜索似乎只是显示了下面的示例。

我的代码是

#!/usr/bin/python3.5

from pysnmp.hlapi import *

varCommunity = "public"
varServer = "demo.pysnmp.com"
varPort = 161

g = getCmd(SnmpEngine(),
       CommunityData(varCommunity),
       UdpTransportTarget((varServer, varPort)),
       ContextData(),
       ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))

next(g)

如果我添加

print(g)

我会得到以下输出

<generator object getCmd at 0x7f25964847d8>
python-3.x pysnmp
2个回答
2
投票

这是您的原始脚本,其中包含一些更改和注释,希望能让您加快使用 pysnmp 的速度:

from pysnmp.hlapi import *

varCommunity = "public"
varServer = "demo.pysnmp.com"
varPort = 161

g = getCmd(SnmpEngine(),
           CommunityData(varCommunity),
           UdpTransportTarget((varServer, varPort)),
           ContextData(),
           ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))

# this is what you get from SNMP agent
error_indication, error_status, error_index, var_binds = next(g)

if not error_indication and not error_status:
    # each element in this list matches a sequence of `ObjectType`
    # in your request.
    # In the code above you requested just a single `ObjectType`,
    # thus we are taking just the first element from response
    oid, value = var_binds[0]
    print(oid, '=', value)

您可能会发现 pysnmp 文档也很有见地。 ;-)


1
投票
next(g)

将从生成器返回下一个值。如果您在 Python 控制台中输入此代码,您将看到实际结果。但是,由于您是从文件运行此命令,因此结果将被丢弃。

您需要将

print
放在它周围。例如

print(next(g))

为了更轻松地调试,您可以获得所有结果的列表,如下所示:

print(list(g))
© www.soinside.com 2019 - 2024. All rights reserved.