Python 解析 Wifi SSID 数据

3 投票
1 回答
3614 浏览
提问于 2025-04-17 10:22

我现在有以下内容。但是我发现如果一个SSID(无线网络名称)里面有空格,排序就会出问题:

import subprocess
import csv

process = subprocess.Popen(['/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport', '-s'], stdout=subprocess.PIPE)
stdout, stderr = process.communicate()

reader = csv.DictReader(stdout.decode('ascii').splitlines(),
                        delimiter=' ', skipinitialspace=True,
                        fieldnames=['wifi_name', 'mac', 'strength'])

for row in reader:
    print(row)

我的目标是把SSID、MAC地址和信号强度存起来,这样就可以和一个电子表格进行比较。

1 个回答

5

来自 airport --help 的信息:

-x        --xml                Print info as XML

这将以苹果的XML格式输出属性列表的信息,这种格式应该更容易被解析。Python 甚至自带一个 plistlib 模块,可以把这个XML解析成Python字典:

#!/usr/bin/env python
from subprocess import Popen, PIPE
from plistlib import readPlist
from pprint import pprint

AirportPath = '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport'

proc = Popen([AirportPath, '-s', '-x'], stdout=PIPE)

ssid_data = readPlist(proc.stdout)
pprint(ssid_data)

撰写回答