我试图构建一个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()