为了账号安全,请及时绑定邮箱和手机立即绑定

使用变量执行用 yaml 编写的 python 脚本

使用变量执行用 yaml 编写的 python 脚本

三国纷争 2021-08-05 16:46:39
我正在尝试使用 YAML 标量值作为变量执行在 YAML 文件中编写的 python 行。我的代码:with open("file.yaml", "r") as file:    yaml_ = yaml.load(file)eval(yaml_['Code'])file.yaml:ToPrint:  var: somethingCode: print("{{var}}")输出是:({{var}}我的预期输出:)something。有没有办法以这种方式打印 YAML 字段?
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

我会将 YAML 文件更改为:


ToPrint:

  var: something

Code: print("{var}".format(**d['ToPrint']))

并且由于您使用的是 Python3 还使用Path:


import sys

import ruamel.yaml

from pathlib import Path


yaml = ruamel.yaml.YAML()

d = yaml.load(Path('file.yaml'))

eval(d['Code'])

这使:


something

请注意,变量d 必须与值中的相同Code


使用{{var}}看起来更像是一个(jinja2)模板。你不能直接评估那些,你需要扩展模板然后全部评估。


查看完整回答
反对 回复 2021-08-05
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可以ToPrint在eval以下位置用作局部变量:


with open("file.yaml", "r") as file:

    yaml_ = yaml.load(file)


eval(yaml_['Code'], yaml_['ToPrint'])

和 yaml 文件:


ToPrint:

  var: something

Code: print(f"{var}")


查看完整回答
反对 回复 2021-08-05
?
倚天杖

TA贡献1828条经验 获得超3个赞

扩展丹尼尔的回答:


yaml 文件:


Const:

    c1: 10

    c2: 20

Expression: var1 * var2 + c1 / c2

代码:


import yaml


with open("formula.yaml", "r") as file:

    yaml_ = yaml.load(file)


res = eval(yaml_['Expression'], 

           {'var1':4, 'var2':2}, 

           yaml_['Const'])

print(res)


查看完整回答
反对 回复 2021-08-05
  • 3 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号