如何在Python中无报错运行Windows CMD命令获取网络适配器名称?
问题根因
你的代码跑不通是三个错误导致的:
- 命令写残缺了:原测试可用的CMD命令末尾有
do echo %H片段,你的os.system调用里直接漏了这部分,命令本身不完整。 - 语法转义错误:
for /F的CMD语法规则里,括号内用单引号包裹的内容才会被识别为「待执行、取输出做遍历的命令」,你错误把单引号转义成了双引号,CMD会把括号内的内容当成文件路径去解析,必然报语法错。 - 编码和输出捕获逻辑缺失:就算命令能跑,直接调用也会遇到中文乱码、拿不到返回值做后续处理的问题。
可行实现方案
1. 最小修正的os.system写法
不需要乱加转义,用Python单引号包裹整个命令,只转义内部CMD语法需要的单引号即可:
import os os.system('for /F "skip=3 tokens=3*" %G in (\'netsh interface show interface\') do echo %H')
这个写法和你直接在CMD里敲原命令效果完全一致。
2. 推荐的subprocess写法(可直接拿到网卡名列表)
如果需要把获取到的网卡名存到变量里做后续逻辑,用subprocess显式指定编码、捕获输出即可,注意必须加shell=True参数才能识别CMD内置的for循环语法:
import subprocess cmd_result = subprocess.run( 'for /F "skip=3 tokens=3*" %G in (\'netsh interface show interface\') do echo %H', shell=True, capture_output=True, text=True, encoding='gbk' # 适配Windows CMD默认的GBK编码,避免中文网卡名乱码 ) # 清洗输出得到纯网卡名列表,自动过滤空行 adapter_list = [name.strip() for name in cmd_result.stdout.splitlines() if name.strip()] print(adapter_list) # 输出示例:['以太网', 'WLAN', 'Loopback Pseudo-Interface 1']
3. 更稳定的纯Python实现(不依赖CMD命令)
解析netsh输出的方案兼容性很差,不同Windows版本的netsh输出表头、格式可能变化,容易失效。可以直接用psutil库读取系统网卡信息,不需要调用任何外部命令:
# 先执行 pip install psutil 安装依赖 import psutil adapter_list = list(psutil.net_if_addrs().keys()) print(adapter_list)
注意:如果不想装第三方库,也可以用Python内置的ctypes读取Windows系统API获取网卡信息,只是代码量会比psutil方案大很多。
内容的提问来源于stack exchange,提问作者Temal
相关产品推荐
相关产品推荐

