2013-06-01 6 views
0

Привет В настоящее время я кодирую случайную программу, которая действительно должна видеть мой MAC-адрес.Извлечение строки Python из подпроцесса

Это то, что я имею на данный момент:

import subprocess 

def get_mac(): 

    mac_addr = subprocess.check_output(["ifconfig", "wlan0"]) 

выход из которого я хочу, чтобы HWaddr извлеченный:

ifconfig wlan0 
wlan0  Link encap:Ethernet HWaddr 00:1b:11:1e:97:29 
      inet addr:10.1.1.6 Bcast:10.1.1.255 Mask:255.255.255.0                             
      inet6 addr: fe80::21b:11ff:fe1e:9729/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:91394 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:58894 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:115550581 (115.5 MB) TX bytes:6097577 (6.0 MB) 

Так что теперь у меня есть местонахождение MAC, но как бы я извлечь его в этом точном формате? Я огляделся и не мог ничего отличить от выделений URL и т. Д.

Все, что я мог найти, это re.search, поэтому я ничего не могу мне помочь, поскольку мне нужно каждый раз, когда нужно найти другой MAC. Благодаря

EDIT:

К сожалению, это 5:30, и я немного устал. Я понял, что даже не закончил свой вопрос, извините. Даже не код:/Edited Теперь

+0

Пожалуйста, будьте более конкретным. Покажите выход команды, которую вы вызываете, а затем покажите, что вы хотите извлечь. В противном случае мы должны угадать, чего вы хотите. – SethMMorton

ответ

0

Если вы на Linux, вы можете попробовать это, чтобы получить MAC-адрес:

iface = 'wlan0' 
mac_addr = open('/sys/class/net/%s/address' % iface).read().rstrip() 

Для общего извлечения строки, вы можете использовать модуль re:

import subprocess, re 

RE_MAC = re.compile(r'\bHWaddr\s+(((?(2):|)[\dA-Fa-f]{2}){6})\b') 
match = RE_MAC.search(subprocess.check_output(["ifconfig", "wlan0"])) 
if match: 
    mac_addr = match.group(1) 

Обратите внимание, что моя версия IFCONFIG (нетто-инструменты 1.60) использует ether, а не HWaddr, иллюстрирующая одну проблему анализа вывода таких программ.

+0

Спасибо за ответ. Я знаю, что это, вероятно, не лучший способ это сделать, но я просто использовал re.findall (регулярное выражение, совпадение). Регулярное выражение похоже на «.. [:] .. [:]» ... и т. Д. –

Смежные вопросы