Получение вывода с помощью pysnmp

Простите, если это так просто, но я новичок в Python, pysnmp и SNMP.

Я пытаюсь выполнить несколько очень простых запросов, используя SNMP для получения информации о конфигурации с устройства, и по какой-то причине следую приведенной здесь документации.

Я не получаю никакого вывода, хотя я могу пройтись по SNMP через snmpwalk, и поиск в Google, кажется, просто показывает приведенный ниже пример.

мой код

#!/usr/bin/python3.5

from pysnmp.hlapi import *

varCommunity = "public"
varServer = "demo.snmplabs.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>

2 ответа

Решение
next(g)

Вернет следующее значение от генератора. Если бы вы печатали этот код в консоли Python, вы бы увидели фактический результат. Однако, поскольку вы запускаете это из файла, результат будет просто отброшен.

Вам нужно поставить print вокруг него. Например

print(next(g))

Для облегчения отладки вы можете получить список всех результатов, например:

print(list(g))

Вот ваш оригинальный скрипт с несколькими изменениями и комментариями, которые, мы надеемся, помогут вам освоиться с pysnmp:

from pysnmp.hlapi import *

varCommunity = "public"
varServer = "demo.snmplabs.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 проницательной.;-)

Другие вопросы по тегам