【问题标题】:Python list of lists from CMD output来自 CMD 输出的 Python 列表列表
【发布时间】:2014-11-12 14:25:14
【问题描述】:

尝试使用 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 和信号,以便我可以打印列表中的任何信息。例如,打印我的列表中第二个接入点的 BSSID,或APS 中的 AP:打印 SSID

任何帮助将不胜感激!

【问题讨论】:

  • 我尝试修复您的代码块,但看起来仍然不太正确。你能仔细检查你的缩进和换行吗?在同一行的函数调用之后有一个for 语句有点奇怪。
  • for 语句在 Popen 行下!感谢您尝试帮助我!!!
  • 您能否举一个netsh 命令的输出示例?否则很难知道要解析什么以及如何解析。
  • 当然可以!我创建了一个 pastebin,因为我不熟悉这里的编辑选项(如果存在的话)它就在这里! pastebin.com/Q2RqbaD0谢谢!

标签: python windows cmd wifi netsh


【解决方案1】:

您可以通过以下方式将输出解析为字典列表:

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

【讨论】:

  • 这正是我想要的!非常感谢!
【解决方案2】:

同样在您的原始代码中,您使用的是.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 之后将包含一个元组列表,其中包含您从每一行中提取的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多