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

如何使用Python修改wpa_supplicant.conf的country国家码参数

实现country参数读写的修改方案

核心改动点

  • 读取配置时单独提取country值,不直接归入普通全局行
  • 给函数增加可选country入参,支持传入新的国家码覆盖原有值
  • 写回配置前先插入更新后的country参数行
  • 同时修复原有代码中错误覆盖第一个非目标WiFi配置的逻辑bug

修改后完整代码

def command_add_wifi(wifi_config, country=None):
    print("-> Adding wifi")
    
    # 读取wpa_supplicant配置文件
    networks = []
    with open("wpa_supplicant.conf", "r") as f:
        in_lines = f.readlines()  

    # 解析配置:拆分全局参数、WiFi网络配置、提取国家码
    global_lines = []
    networks = []
    current_country = ""
    i = 0
    is_inside_network = False
    for line in in_lines:
        stripped_line = line.strip().replace(" ", "")
        if stripped_line == "network={":
            networks.append({})
            is_inside_network = True
        elif stripped_line == "}":
            i += 1
            is_inside_network = False
        elif is_inside_network:      
            key_value = line.strip().split("=", 1) # 用split(=,1)避免值里有=的情况出错
            if len(key_value) == 2:
                networks[i][key_value[0]] = key_value[1]
        else:
            # 全局行识别country参数
            if line.strip().startswith("country="):
                current_country = line.strip().split("=",1)[1]
                continue
            global_lines.append(line)

    # 更新国家码:如果传入新的country则覆盖,否则保留原有值
    if country is not None:
        current_country = country

    # 更新WiFi配置:存在则改密码,不存在则新增
    is_found = False
    for network in networks:
        if network.get("ssid") == f"\"{wifi_config['ssid']}\"":
            network["psk"] = f"\"{wifi_config['psk']}\""
            network["key_mgmt"] = f"\"{wifi_config['key_mgmt']}\""
            is_found = True
            break
    if not is_found:
        networks.append({
            'ssid': f"\"{wifi_config['ssid']}\"",
            'psk': f"\"{wifi_config['psk']}\"",
            'key_mgmt': f"\"{wifi_config.get('key_mgmt', 'WPA-PSK')}\""
        })

    # 拼接最终配置内容
    out_lines = []
    # 先加所有原有全局行
    out_lines.extend(global_lines)
    # 插入更新后的国家码行,插在注释行后面符合原有配置格式
    out_lines.insert(1, f"country={current_country}\n")
    # 加所有WiFi网络配置
    for network in networks:
        out_lines.append("network={\n")
        for key, value in network.items():
            out_lines.append(f"    {key}={value}\n")      
        out_lines.append("}\n\n")

    # 写入配置文件
    with open('wpa_supplicant.conf', 'w') as f:
        f.writelines(out_lines)

    print("-> Wifi added !")

# 调用示例1:修改国家码为CN
command_add_wifi({"ssid": "wiefaaeir_nraume", "psk": "fpassword", "key_mgmt": "key_mgmt"}, country="CN")
# 调用示例2:不需要修改国家码,不传country参数即可沿用原有配置的值
# command_add_wifi({"ssid": "wiefaaeir_nraume", "psk": "fpassword", "key_mgmt": "key_mgmt"})

功能说明

  • 不需要修改国家码时,不传country参数即可保留配置文件中原有的国家码值
  • 需要修改国家码时,传入对应两位国家码即可,比如country="CN"代表中国、country="US"代表美国
  • 修复了原代码中会错误覆盖第一个非目标WiFi配置的逻辑问题,新增了split分隔符数量限制,避免配置值中包含=时解析出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:01