擅长:python、mysql、java
<p>PY yaml库默认情况下不解析环境变量。您需要定义一个隐式解析器,它将找到定义环境变量的正则表达式并执行一个函数来解析它。</p>
<p>你可以通过<code>yaml.add_implicit_resolver</code>和<code>yaml.add_constructor</code>来完成。在下面的代码中,您将定义一个解析器,它将匹配YAML值中的${env variable},并调用函数path_构造函数来查找环境变量。</p>
<pre><code>import yaml
import re
import os
path_matcher = re.compile(r'\$\{([^}^{]+)\}')
def path_constructor(loader, node):
''' Extract the matched value, expand env variable, and replace the match '''
value = node.value
match = path_matcher.match(value)
env_var = match.group()[2:-1]
return os.environ.get(env_var) + value[match.end():]
yaml.add_implicit_resolver('!path', path_matcher)
yaml.add_constructor('!path', path_constructor)
data = """
env: ${VAR}/file.txt
other: file.txt
"""
if __name__ == '__main__':
p = yaml.safe_load(data)
print(os.environ.get('VAR')) ## /home/abc
print(p['env']) ## /home/abc/file.txt
</code></pre>