来自CMD outpu的Python列表列表

2024-09-29 01:34:10 发布

您现在位置: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:print SSID。在

任何帮助都将不胜感激!在


Tags: inimportrecmd列表signalstdoutline
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"]

在原始代码中,您还使用了.group(),它将返回行的全部匹配部分。在

您可以使用带位置参数的group()从regex中获取该组。例如,group(2)将返回regex中的第二项([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之后,我的列表将包含一个元组列表,其中包含每一行的摘录。在

相关问题 更多 >