从子流程提取Python字符串

从子流程提取Python字符串,python,subprocess,extraction,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 ad

嗨,我目前正在编写一个随机程序,它实际上需要查看我的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的下落,但我如何才能以这种精确的格式提取出来呢? 我环顾四周,除了URL提取之类的东西,我什么都看不清楚

我能找到的只是重新搜索,这对我一点帮助都没有,因为我每次都需要找到不同的MAC电脑。谢谢

编辑:


对不起,现在是5:30,我有点累了。我意识到我甚至没有完成我的问题对不起。即使代码:/Edited now

如果您在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版本(NetTools 1.60)使用了
ether
而不是
HWaddr
,说明了解析此类程序输出的一个问题。

请更具体一些。显示正在调用的命令的输出,然后显示要提取的内容。否则我们必须猜到你想要什么。谢谢你的回复。我知道这可能不是最好的方法,但我只是使用了re.findall(regex,match)regex-ws,比如“.[:].[:]”。。。等