【发布时间】:2020-11-24 04:56:13
【问题描述】:
我使用下一个最小示例来解释我的问题:
test.py
#! /usr/bin/python3
import jinja2
import yaml
from yaml import CSafeLoader as SafeLoader
devices = [
"usb_otg_path: 1:8",
"usb_otg_path: m1:8",
"usb_otg_path: 18",
]
for device in devices:
template = jinja2.Template(device)
device_template = template.render()
print(device_template)
obj = yaml.load(device_template, Loader=SafeLoader)
print(obj)
运行结果为:
root@pie:~# python3 test.py
usb_otg_path: 1:8
{'usb_otg_path': 68}
usb_otg_path: m1:8
{'usb_otg_path': 'm1:8'}
usb_otg_path: 18
{'usb_otg_path': 18}
你可以看看device_template的值是不是usb_otg_path: 1:8,那么在yaml.load之后,1:8就变成了68,看起来是因为我们里面有:。但其他 2 个输入也没关系。
你知道上面是一个复杂系统的简化,其中"usb_otg_path: 1:8"是我无法更改的输入值,yaml.load是它用来将字符串更改为python对象的基本机制。
那么如果可能的话,我可以通过一些小的改动来获得{'usb_otg_path': '1:8'}(我们需要上游到那个项目,所以可能不能做大的改动来影响其他人)?比如更改yaml.load 的任何参数或其他什么?
【问题讨论】: