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

时间:2018-11-02 09:54:57

标签: python python-3.x yaml

我正在尝试使用YAML标量值作为变量执行在YAML文件中编写的python行。

我的代码:

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

eval(yaml_['Code'])

file.yaml

ToPrint:
  var: something
Code: print("{{var}}")

输出为:{{var}}(我的预期输出为:something)。

是否可以通过这种方式打印YAML字段?

3 个答案:

答案 0 :(得分:1)

我将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)模板。你不能 直接评估那些,您需要扩展模板,然后全部 评估。

答案 1 :(得分:0)

您可以在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}")

答案 2 :(得分:0)

扩展丹尼尔的回答:

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)