首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行python的snmpd传递

运行python的snmpd传递
EN

Stack Overflow用户
提问于 2018-10-09 11:36:44
回答 1查看 855关注 0票数 0

我试图通过snmp查询modbus设备,使用snmpd来传递python脚本来检索数据。

代码语言:javascript
复制
#! /bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.52612.10.3.1
echo string
python /usr/local/bin/readvolt.py
fi
exit 0

这个readvolt.py看起来是这样的:

代码语言:javascript
复制
#!/usr/bin/python
import minimalmodbus
eqp = minimalmodbus.Instrument('/dev/ttyUSB0',1) # port name, slave address (in decimal)
# skip some other lines for serial port initialization
volt = eqp.read_float(0,4,2) # getting data from serial modbus
print volt

这句话来自我的snmpd.conf:

代码语言:javascript
复制
pass .1.3.6.1.4.1.52612.10.3.1 /bin/sh /usr/local/bin/volt.sh

我的问题是:我得到了python的回溯,无法找到minimalmodbus模块,但是当我尝试从主机直接运行readvolt.py时,它正在按预期工作(它可以打印结果(volt) )。

代码语言:javascript
复制
pi@raspberrypi:/usr/local/bin $ readvolt.py
220.25

我还尝试使用简单python脚本(test.py),以确保snmpd传递是否可以在snmpget从snmp管理器获得响应时运行python脚本。

代码语言:javascript
复制
#!/usr/bin/python
import sys
print "test"

它运行正常:

代码语言:javascript
复制
suryo@r50e:~$ snmpwalk -v2c -c public 192.168.1.5 .1.3.6.1.4.1.52612.10.3.1
iso.3.6.1.4.1.52612.10.3.1 = STRING: "test"
suryo@r50e:~$ 

这里有什么问题?似乎python在snmpd pass运行时无法导入外部模块。我在想,如果这是一个访问控制问题,Debian没有权利访问串口。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 15:52:45

通过查找snmpd守护进程的用户名解决了问题。我将whoami放入脚本中,得到“Debian-snmp”,然后直接运行,通过运行检查组成员:

代码语言:javascript
复制
pi@rraspberrypi:~$ groups Debian-snmp
Debian-snmp : Debian-snmp

将Debian-snmp置于拨号成员资格中,以授予对串行端口的完全访问:

代码语言:javascript
复制
pi@raspberrypi:~ $ sudo usermod -a  -G dialout Debian-snmp

重新启动snmpd以新成员身份登录,voilla..It可以从snmp命令/snmpget读取从modbus设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52720128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档