经过研究,我发现在windows下获取以太网MAC地址最好的方法是 "getmac "命令。(python的getmac模块并不能产生同样的结果!)。现在我想在python代码中使用这个命令来获取MAC地址。我想出我的代码应该以这样的方式开始。
import os
if sys.platform == 'win32':
os.system("getmac")
do something here to get the first mac address that appears in the results
这里是一个输出的例子
Physical Address Transport Name
=================== ==========================================================
1C-69-7A-3A-E3-40 Media disconnected
54-8D-5A-CE-21-1A \Device\Tcpip_{82B01094-C274-418F-AB0A-BC4F3660D6B4}
我最后想得到1C-69-7A-3A-E3-40最好不要有破折号.先谢谢你。
两件事情。首先,我建议你想办法更优雅地获取mac地址。这个问题的答案似乎使用了uuid模块。,这或许是一个不错的跨平台解决方案。
话虽如此如果你想继续解析系统调用的输出,我推荐使用Python的 子流程模块. 比如说。
import subprocess
output_of_command = subprocess.check_output("getmac")
这将运行 getmac
而该命令的输出将进入一个变量。从那里,你可以解析这个字符串。
下面是你如何从该字符串中提取mac地址。
# I'm setting this directly to provide a clear example of the parsing, separate
# from the first part of this answer.
my_string = """Physical Address Transport Name
=================== ==========================================================
1C-69-7A-3A-E3-40 Media disconnected
54-8D-5A-CE-21-1A \Device\Tcpip_{82B01094-C274-418F-AB0A-BC4F3660D6B4}"""
my_mac_address = my_string.rsplit('=', 1)[-1].split(None, 1)[0]
第一个分割是一个 右旋. 它用'='字符将字符串分解,一次,从字符串的末端开始。然后,我用空格分割输出,限制为一次分割,并取第一个字符串值。
不过,我还是不鼓励用这种方法来获取mac地址。解析命令行脚本的人类可读输出很少是可取的,因为输出可能会出乎意料地与你的脚本所期望的不同。你肯定可以用更稳健的方式来获取mac地址。