尝试使用python从CMD输出解析SSID,BSSID和Signal的值。令我困惑的是如何每次将这三个值存储在列表列表中。我可以为每一行做这样的事情。
import subprocess, re
cmd = subprocess.Popen('netsh wlan show networks mode=BSSID',
shell=True, stdout=subprocess.PIPE)
for line in cmd.stdout:
if "BSSID" in line:
print re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', line, re.I).group()
但问题是我能理解这不是一个好习惯。
我想要实现的是在列表中使用SSID,BSSID和Signal,这样我就可以打印列表中的任何信息。例如,从我的列表中打印第二个接入点的BSSID ,或者
任何帮助将不胜感激!
答案 0 :(得分:2)
以下是将输出解析为字典列表的方法:
import subprocess
ssid = {}
ssids = []
cmd = subprocess.Popen('netsh wlan show networks mode=BSSID',
shell=True, stdout=subprocess.PIPE)
for line in cmd.stdout:
l = map(lambda x: x.strip(), line.strip().split(":"))
if len(l) > 1:
key, value = l[0], l[1]
if key.startswith("SSID"):
key = "name"
if ssid:
ssids.append(ssid)
ssid = {}
ssid[key] = value
if "name" in ssid:
ssid[key] = value
ssids.append(ssid)
# example of how to use ssids, list of ssid dictionaries
for ssid in ssids:
print ssid["name"], ssid["Encryption"]
答案 1 :(得分:0)
同样在您的原始代码中,您使用的是.group()
,它将返回该行的整个匹配部分。
您可以使用group()
和位置参数从reg ex获取该组。例如group(2)
会从正则表达式([0-9A-F]{2})
返回第二项。
要返回可以附加到列表的项目元组,只需使用groups()
即可。
例如,假设正则表达式正确,请更改此部分;
mylist=list()
for line in cmd.stdout:
if "BSSID" in line:
mylist.append(re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', line, re.I).groups())
在上面的mylist中包含一个元组列表,其中包含每行的摘录。