2012-01-16 28 views
3

私は現在以下を持っています。しかし、私は、SSIDにスペースが含まれる場合は順序が消灯していることに気づいた:wifi SSIDデータをPythonで解析する

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アドレスと信号強度を得ることです。 airport --helpから

+0

、それは同じです:PythonはさえPythonの辞書にXMLを解析することができますplistlibモジュールが付属しています。 – beoliver

答えて

5

:より確実に解析可能でなければなりませんプロパティリスト、AppleのXML形式で出力情報を意志

-x  --xml    Print info as XML 

。私はAWKを使用して見ていた「{$ 1印刷;}」

#!/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) 
+0

@ user969617:Pythonはplistsを読むためのライブラリを持っています。 – millimoose

+0

愚かな質問に対する謝罪、これについてどうすればよいですか? xmlファイルを保存すると、 'from plistlib import readPlist''を使用することができます。' 'pl = readPlist( '/ Users/name/Library/Scripts/wifiinfo')' 'print(pl [1])'まずファイルを保存しますか? – beoliver

+0

「readPlist'のdocs」(http://docs.python.org/py3k/library/plistlib.html#plistlib.readPlist)は、「 'pathOrFile'はファイル名か(読みやすい)ファイルのどちらかですオブジェクト "です。プロセス*の標準出力は、 "読み取り可能なファイル"としてカウントされるべきです。 – millimoose