Недавно Ubuntu начал поставлять с netplan.Для настройки сетевых интерфейсов потребовались конфиги yaml.Так, например, для настройки WiFi требуется следующий yaml:
network:
version: 2
renderer: NetworkManager
wifis:
interface_name:
access-points:
"apn":
password: "pwd"
nameservers:
addresses: [8.8.4.4, 8.8.8.8]
dhcp4: true
Обратите внимание на точки доступа, имя_сети_идентификатора сети (apn) и значение поля пароля (pwd) заключены в двойные кавычки.
Я огляделся по поводу переполнения стека и обнаружил this
Однако для этого решения требуется установка модуля из pip-вызова ruamel.yaml.Я хочу добиться этого, используя модуль PyYAML, который уже доступен в моем дистрибутиве Python.
Вот некоторые вещи, которые я пробовал до сих пор:
import yaml
d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'access-points': {b'apn': {'password': b'pwd'}}}}}}
with open('/home/edyza/result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)
Вывод этого
network:
renderer: NetworkManager
version: 2
wifis:
wlp58s0:
access-points:
apn:
password: pwd
Теперь я попытался использовать escape-символы и некоторые другие вещи.например,
import yaml
d = {'network': {'version': 2, 'renderer': 'NetworkManager', 'wifis':{'wlp58s0': {'"access-points"': {'apn': {'password': "\"pwd\""}}}}}}
with open('/home/edyza/result.yml', 'w') as yaml_file:
yaml.dump(d, yaml_file, default_flow_style=False, default_style=None)
Затем выходные данные изменяются на
network:
renderer: NetworkManager
version: 2
wifis:
wlp58s0:
'"access-points"':
apn:
password: '"pwd"'
Какие изменения можно внести для достижения желаемого результата с помощью двойных кавычек с соответствующими ключом и значениями без использования стороннего модуля?
Или есть другой подход, который я должен рассмотреть для создания файлов yaml.