Недавно 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
Обратите внимание, что в разделе «точки доступа» network_ssid_name (apn) и значение поля пароля (pwd) заключены в двойные кавычки.
Я посмотрел на переполнение стека и нашел это
Однако это решение требует установки модуля из pip call 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.
ruamel.yaml
, ни PyYAML, ни PySyck (оба из которых поддерживают только версии YAML, которые устарели десять или более лет назад). Пожалуйста, предоставьте ссылки (например, в репозитории Python) на то, что будет *модулем yaml, который поставляется по умолчанию с python`, чтобы мы знали, о чем вы говорите. - person Anthon   schedule 23.06.2019