#python #python-3.x
Вопрос:
Я хочу изменить файл wpa_supplicant.conf с помощью python. Поэтому я и написал этот сценарий
def command_add_wifi(json):
print("-> Adding wifi")
# Read file WPA suppliant
networks = []
with open("wpa_supplicant.conf", "r") as f:
in_lines = f.readlines()
# Discover networks
out_lines = []
networks = []
country = ""
i = 0
isInside = False
for line in in_lines:
if "network={" == line.strip().replace(" ", ""):
networks.append({})
isInside = True
elif "}" == line.strip().replace(" ", ""):
i = 1
isInside = False
elif isInside:
key_value = line.strip().split("=")
networks[i][key_value[0]] = key_value[1]
else:
out_lines.append(line)
# Update password or add new
isFound = False
for network in networks:
if network["ssid"] == f""{json['ssid']}"":
network["psk"] = f""{json['psk']}""
network["key_mgmt"] = f""{json['key_mgmt']}""
isFound = True
break
elif network["ssid"] != f""{json['ssid']}"":
network["ssid"] = f""{json['ssid']}""
network["psk"] = f""{json['psk']}""
network["key_mgmt"] = f""{json['key_mgmt']}""
isFound = True
break;
if not isFound:
networks.append({
'ssid': f""{json['ssid']}"",
'psk': f""{json['psk']}"",
'key_mgmt': "WPA-PSK"
})
# Generate new WPA Supplicant
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("}nn")
# Write to WPA Supplicant
with open('wpa_supplicant.conf', 'w') as f:
for line in out_lines:
f.write(line)
print("-> Wifi added !")
command_add_wifi({"ssid": "wiefaaeir_nraume", "psk": "fpassword", "key_mgmt": "key_mgmt"})
Но я не могу изменить код страны. И я не вижу леса перед деревом. Как я могу также изменить/прочитать страну параметра?
Это файл
# WiFi configuration generated by openHABian
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# Network configuration was created by wpa_passphrase to ensure correct handling of special characters
network={
ssid="wiefaaeir_nraume"
psk="fpassword"
key_mgmt="key_mgmt"
}
Скрипт пока работает, но я не могу изменить код страны.
Комментарии:
1. Какую часть вашего сценария вы ожидали сделать с кодом страны?
2. Как человек, который занимается devop уже буквально десятилетия, я не рекомендую писать код для изменения файлов конфигурации на месте. Гораздо более приемлемо вместо этого создавать шаблоны для создания этих файлов из данных в форме, с которой будет легко работать. (Что-то вроде: JSON — > механизм шаблонов — > > файлы конфигурации)
3. (чтобы сделать это для всего дистрибутива Linux, см. NixOS, где
configuration.nix
используется для программного создания любого другого файла конфигурации в системе и написан на достаточно мощном языке программирования, чтобы там можно было выполнить любую необходимую логику домена).4. Сразу после комментария «# Откройте для себя сети». Это должна быть новая переменная со страной, и там ДЕ должно быть сохранено
5. …необходимость разбора произвольных форматов файлов конфигурации делает ваш код уязвимым-любая функция, которую вы в настоящее время не поддерживаете, означает возможный сбой разбора или неправильный разбор; и еще хуже случаи, когда ваш код генерации не возвращается к своим входным данным, когда он передается обратно через ваш синтаксический анализатор. Идти по этой дороге-значит навлечь на вас гору технических долгов.