CMD输出的列表的Python列表



尝试使用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,或者对于APS中的AP:打印SSID

任何帮助都将不胜感激!

以下是如何将输出解析为字典列表的方法:

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"]

此外,在原始代码中,您使用的是.group(),它将返回行的整个匹配部分。

您可以使用带有位置参数的group()从正则表达式中获取该组。例如,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将包含一个元组列表,其中包含每行的摘录。

相关内容

  • 没有找到相关文章

最新更新