You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:39:17