如何使用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
相关产品推荐
相关产品推荐

