从Subprocess中提取Python字符串

时间:2013-06-01 19:17:09

标签: python subprocess extraction

您好,我目前正在编写一个随机程序,实际上需要查看我的MAC地址。

这就是我现在所拥有的:

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的下落,但我如何以确切的格式提取它? 我环顾四周,除了网址提取等以外,我无法做任何其他事情。

我所能找到的只是re.search,它根本不能帮助我,因为我需要每次都找到不同的MAC。感谢

编辑:

对不起,这是5点30分,我有点累了。我意识到我甚至没有完成我的问题。甚至没有代码:/现在编辑

1 个答案:

答案 0 :(得分: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版本(net-tools 1.60)使用ether而非HWaddr,说明了解析此类程序输出的一个问题。