Net-SNMP返回十六进制字符串和普通字符串(Eclipse和Pydev)
我正在使用Net-SNMP进行snmpget操作。具体来说,我是通过os.popen("etc")发送一个命令。返回的值是一个用空格分开的十六进制字符串,像这样:“A0 f0 D0”。有时候返回的值是这样的格式:“Hex-String: A0 f0 D0..”,但有时候又是“String:\xA0\xf0\xD0”,你可以看到,空格被“\x”替代了。有人知道为什么会这样吗?我更希望返回的值是带空格的十六进制字符串,而不是\x。
我还想提一下,我是在Eclipse中使用Pydev的。我在pyscripter中运行了相同的代码,得到了我的十六进制字符串值。然后我在pyscripter中再次运行,结果又变成了\x。这个问题是不是和未关闭的管道有关?
我还想说,我得到的数据在另一个方面也有问题。带空格的十六进制字符串返回的是正确的数据值,但带\x的字符串返回的值却不正确。
我使用了Wireshark,发现get请求和从MIB发送的请求完全一样。MIB请求返回了正确的数据,而Eclipse请求仍然返回错误的数据。
1 个回答
0
PyDev 有一个不同的做法,就是设置:sys.setdefaultencoding(encoding),这个编码是和 Java 控制台的编码相同的。这样做的好处是,如果你往控制台打印 Unicode 字符,就不会出现错误,提示说这个 Unicode 不能解码成 ASCII。要检查这是不是你遇到的问题,你可以去找到这个文件:eclipse\plugins\org.python.pydev\PySrc\pydev_sitecustomize\sitecustomize.py,然后把里面负责设置 sys.setdefaultencoding(encoding) 的那一行注释掉。