擅长:python、mysql、java
<p>如果您不想修改全局/默认yaml加载程序,这里有一个替代版本,它确实使用了一个新的加载程序类。</p>
<p>更重要的是,它正确地替换了不只是环境变量的插值字符串,例如<code>path/to/${SOME_VAR}/and/${NEXT_VAR}/foo/bar</code></p>
<pre class="lang-py prettyprint-override"><code> path_matcher = re.compile(r'.*\$\{([^}^{]+)\}.*')
def path_constructor(loader, node):
return os.path.expandvars(node.value)
class EnvVarLoader(yaml.SafeLoader):
pass
EnvVarLoader.add_implicit_resolver('!path', path_matcher, None)
EnvVarLoader.add_constructor('!path', path_constructor)
with open(configPath) as f:
c = yaml.load(f, Loader=EnvVarLoader)
</code></pre>