我试图构建一个python脚本来从snmp传感器获取温度。

如果我在Linux终端上使用此命令行

snmpwalk 10.100.2.21 -On -v 1 -c public .1.3.6.1.4.1.28507.14.1.3.1.1.2.2


输出正确:

.1.3.6.1.4.1.28507.14.1.3.1.1.2.2 = INTEGER: 225


实际上它的返回温度为:-) 22.5°C
但是我必须使用python脚本:

#!/usr/bin/python
# -*- coding: latin-1 -*-
import netsnmp
#oid = '.1.3.6.1.4.1.28507.14.1.3.1.1.2.2'
oid =   netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.4.1.28507.14.1.3.1.1.2.2'))
print ("Hello !!!")
res = netsnmp.snmpwalk(oid, Version=1, DestHost='10.100.2.21',   Community='public')
print res


我不知道为什么,我的脚本只返回:

 "()"


你有一些想法吗?

谢谢

最佳答案

netsnmp的构造不能那样工作。据我所知,您需要在进行查询之前打开一个snmp会话。

我通常这样做:

session=netsnmp.Session(DestHost=myip, Version=2, Community='public', RemotePort=161)


然后,您可以检查会话是否正确:

if session:
  continue
else:
  print sys.exc_info()
  exit(1)


最后:

myoid=netsnmp.VarList('.1.3.6.1.4.1.28507.14.1.3.1.1.2.2')
res=snmp.walk(myoid)
for i in res:
  print i


我使用的是for循环,因为您选择了snmp.walk(),这可能会返回许多行值。您可以改用snmp.get()

09-30 15:59
查看更多