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

我正在尝试使用 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 字段?


三国纷争
浏览 296回答 3
3回答

慕斯王

我会将 YAML 文件更改为:ToPrint:  var: somethingCode: print("{var}".format(**d['ToPrint']))并且由于您使用的是 Python3 还使用Path:import sysimport ruamel.yamlfrom pathlib import Pathyaml = ruamel.yaml.YAML()d = yaml.load(Path('file.yaml'))eval(d['Code'])这使:something请注意,变量d 必须与值中的相同Code使用{{var}}看起来更像是一个(jinja2)模板。你不能直接评估那些,你需要扩展模板然后全部评估。

蝴蝶不菲

您可以ToPrint在eval以下位置用作局部变量:with open("file.yaml", "r") as file:    yaml_ = yaml.load(file)eval(yaml_['Code'], yaml_['ToPrint'])和 yaml 文件:ToPrint:  var: somethingCode: print(f"{var}")

倚天杖

扩展丹尼尔的回答:yaml 文件:Const:    c1: 10    c2: 20Expression: var1 * var2 + c1 / c2代码:import yamlwith open("formula.yaml", "r") as file:    yaml_ = yaml.load(file)res = eval(yaml_['Expression'],            {'var1':4, 'var2':2},            yaml_['Const'])print(res)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python