我正在尝试编写一个通过 SNMP 管理复杂设备的程序。我使用 Python 3 作为编程语言。从托管设备读取 SNMP 变量很好。根本无法运行netsnmp.snmpset。例子:
>>> import netsnmp
>>> x1 = '11:22:33:44:55:66'
>>> ss = netsnmp.Session(Version = 2, DestHost = '172.17.132.73', Community="public")
>>> tag = '.1.3.6.1.4.1.<Моя фирма>.5.1.2.1.3.10.1'
>>> vb = netsnmp.Varbind(tag, '0', x1, 'STRING')
>>> snmpe = netsnmp.snmpset(vb, ss)
抛出以下错误:
Traceback (innermost last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.5/dist-packages/netsnmp/client.py", line 246, in snmpset var_list.append(Varbind(arg)) File "/usr/local/lib/python3.5/dist-packages/netsnmp/client.py", line 64, in __init__ match = regex.match(tag) TypeError: expected string or bytes-like object
如果您查看输出中指示的结果,您可以看到发誓进入vb对象中的标记字段。但他绝对是STRING !!!。因此,我完全不清楚错误消息的含义。我试图删除 OID 中的起点,我尝试自己在末尾添加“0” - 没有效果。
什么样的玄学?!
试试这样:
我不得不查看库代码:
在这里,您可以看到作为参数列表 (args) 传递给函数的所有内容都被考虑
Varbind
,命名参数 (kargs
) 是参数Session
。因此,在执行时,( ) 中的
netsnmp.snmpset(vb, ss)
对象没有通过测试,最终在构造函数中为:ss
Session
if isinstance(arg, netsnmp.client.Varbind):
Varbind
tag
好吧,正如它在错误中一样,
regex.match
它适用于字符串和字节。