2015-02-09 144 views
0

以下代码将获取所有接入点并显示其SSID以及其Strength属性。但是,我不知道这个属性是如何编码:如何使用Python获得WLAN的信号强度?

import NetworkManager 
for dev in NetworkManager.NetworkManager.GetDevices(): 
    if dev.DeviceType != NetworkManager.NM_DEVICE_TYPE_WIFI: 
     continue 
    aps = [ap for ap in dev.SpecificDevice().GetAccessPoints()] 
    for ap in sorted(aps, key=lambda ap: ap.Ssid): 
     print(u"%s:: %s" % (ap.Ssid, ap.Strength.encode("unicode_escape"))) 

我得到的是这样的:

blabla1:: 2 <- The strongest signal 
blabla2:: \x0c <- The weakest signal 
DarkRoom:: \x13 
FRITZ!Box 6340 Cable:: \n 
FRITZ!Box 6360 Cable:: \x0e 
FRITZ!Box 7272:: \x0c 
FRITZ!Box Fon WLAN 7270:: \t 
blabla3:: \x07 
blabla4:: \x11 
blabla5:: \x0c 
blabla6:: (
blabla7:: \x07 
blabla8:: \n 
teco:: \n 
wkit-802.1x:: \x14 
blabla9:: \t 

如何获得有意义的值出来的呢?

+2

它可能(有可能?)它实际上是一个二进制值,而不是一个编码的字符串。所以最强的是'50'和最弱的'12'。 – poke 2015-02-09 07:57:24

回答

2

尝试更新您的python-networkmanager代码。参观它的github上,你可以看到,代码是20天以前更新了纸条:“解码的信号强度以整数”

你可以看到代码的变化在这里: https://github.com/seveas/python-networkmanager/commit/079ebfef92dec3d8ad49d9a5df1e569c68e3355a

的代码中你有兴趣(字节到整数转换):

struct.unpack('B', strength)[0] 

注意,结果是一个元组,因此关于拆包字节串[0]更多信息可以在python文档中找到:

https://docs.python.org/2/library/struct.html