2012-01-16 2 views
3

현재 다음과 같은 정보가 있습니다. 그러나 나는 SSID에 공백이 포함 된 경우 주문이 꺼집니다 것으로 나타났습니다 :wifi 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 주소 및 신호 강도를 얻을 수 있습니다. airport --help에서

+0

내가보고 AWK를 사용하여 '{$ (1) 인쇄를}'했다 : 파이썬 심지어 파이썬 사전에 XML을 구문 분석 할 수있는 plistlib 모듈과 함께 제공됩니다. – beoliver

답변

5

:

-x  --xml    Print info as XML 

어떤 출력합니다 더 확실하게 분석 할 수 있어야 재산 목록, 애플의 XML 형식으로 정보를 제공합니다. 그리고이 동일

#!/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

나는 이것을 위해'xml.etree'를 사용할 것입니다 ... 올바른 트랙에 있음을 확인하는 것입니다 :) – beoliver

+0

@ user969617 : 파이썬은 plists를 읽기위한 라이브러리를 가지고 있습니다. 나는 그것을 대답으로 편집 할 것입니다. – millimoose

+0

어리석은 질문에 사과드립니다.하지만 어떻게해야합니까? xml 파일을 저장하면'from plistlib import readPlist'''pl = readPlist ('/ 사용자/이름/라이브러리/스크립트/wifiinfo')''print (pl [1])'를 사용할 수 있습니다. 먼저 파일을 저장 하시겠습니까? – beoliver

관련 문제