最近,Ubuntu已开始随netplan一起提供。它需要yaml配置来设置网络接口。因此,例如,它需要以下yaml才能设置WiFi:
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)用双引号引起来。
我四处查看堆栈溢出,发现this
但是,此解决方案要求从pip调用ruamel.yaml安装模块。我想使用我的python发行版中已经可用的PyYAML模块来实现此目的。
到目前为止,我尝试了一些方法:
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
现在我尝试使用转义符和其他一些诸如
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文件。
答案 0 :(得分:0)
在YAML中,除了特殊情况(字符串以特殊字符开头,包含控制字符或:<SPACE>
的情况除外),都不需要用引号引起来。
作为参考,我可以推荐我的article on YAML quoting吗?
我认为netplan YAML解析器不太可能真的需要这些引号。 您是否尝试了不带引号的操作,并且收到错误消息?