Ваш YAML совершенно нормальный, и он загружается, как вы можете видеть здесь .
У вас есть один ключ (os2
) и, как значение, многострочный простой скаляр, который загружает,следуя стандарту YAML, в виде строки с пробелом, где YAML имеет символы новой строки + пробелы.Это значение, таким образом, загружается как "host:hostname ip:10.123.3.182 path:/var/log/syslog file:syslog"
.
Поскольку вы указываете, что ожидаете значения (кратные), вы должны либо ввести значение для os2
отображение в стиле потока (в этом случае вы должны заключить в кавычки скаляры, в противном случаеВы можете, например, не писать простые URL-адреса как скаляры в действительном YAML):
os2: {
"host":"hostname",
"ip":"10.123.3.182",
"path":"/var/log/syslog",
"file":"syslog"
}
или вам следует следовать руководству из стандарта YAML , что
Обычно, YAML настаивает на том, чтобы индикатор значения отображения «:» отделялся от значения пробелом.
os2:
host: hostname
ip: 10.123.3.182
path: /var/log/syslog
file: syslog
Вы должны загрузить YAML (при использовании PyYAML), используя yaml.safe_load()
, поскольку абсолютно нетнеобходимо использовать функцию yaml.load()
, которая, как задокументировано, потенциально небезопасна.
Используя любое из вышеперечисленных в config.yaml
, вы можете сделать:
import sys
import yaml
with open('config.yaml') as stream:
d = yaml.safe_load(stream)
os2 = d['os2']
# "concatenate" host, ip and path
print('{host}@{ip}:{path}'.format(**d['os2']))
, чтобы получить:
hostname@10.123.3.182:/var/log/syslog