我用下一个最小的例子来解释我的问题:
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变为,看起来像因为我们在其中。但其他 2 个输入没问题。1:868:
你知道上面是一个复杂系统的简化,其中"usb_otg_path: 1:8"是我无法更改的输入值,也是yaml.load它用于将字符串更改为 python 对象的基本机制。
然后,如果可能的话,我可以做{'usb_otg_path': '1:8'}一些小的改变(我们需要向上游到那个项目,所以可能不能做大的改变来影响其他人)?诸如更改任何参数yaml.load或其他内容之类的东西?
四季花海
相关分类