我需要在需要用脚本解析的 yaml 文件中使用环境变量“PATH”。
这是我在终端上设置的环境变量:
$ echo $PATH
/Users/abc/Downloads/tbwork
这是我的 sample.yml:
---
Top: ${PATH}/my.txt
Vars:
- a
- b
当我用我的脚本解析这个 yaml 文件时,我没有看到 PATH
变量的实际值。
这是我的脚本:
import yaml
import os
import sys
stream = open("sample.yml", "r")
docs = yaml.load_all(stream)
for doc in docs:
for k,v in doc.items():
print k, "->", v
print "\n",
输出:
Top -> ${PATH}/my.txt
Vars -> ['a', 'b']
预期输出是:
Top -> /Users/abc/Downloads/tbwork/my.txt
Vars -> ['a', 'b']
如果我做错了,有人可以帮我找出正确的方法吗?
原文由 npatel 发布,翻译遵循 CC BY-SA 4.0 许可协议
PY-yaml 库默认不解析环境变量。您需要定义一个隐式解析器,它将找到定义环境变量的正则表达式并执行一个函数来解析它。
您可以通过
yaml.add_implicit_resolver
和yaml.add_constructor
。在下面的代码中,您定义了一个将匹配 YAML 值中的 ${ env variable } 的解析器,并调用函数 path_constructor 来查找环境变量。警告: 如果您不是指定环境变量(或任何其他不受信任的输入)的人,请不要运行此程序,因为截至 2020 年 7 月,FullLoader 存在远程代码执行漏洞。