如何在要使用python脚本解析的yaml文件中替换环境变量值

npatel:

我需要在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']

如果我做错了事,有人可以帮我弄清楚做事的正确方法吗?

dmchk:

PY-yaml库默认情况下不解析环境变量。您需要定义一个隐式解析器,该解析器将找到定义环境变量的正则表达式并执行函数来对其进行解析。

您可以通过yaml.add_implicit_resolver和完成此操作yaml.add_constructor在下面的代码中,您将定义一个解析器,该解析器将与YAML值中的$ {env variable}匹配,并调用函数path_constructor来查找环境变量。

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.load(data, Loader=yaml.FullLoader)
  print(os.environ.get('VAR')) ## /home/abc
  print(p['env']) ## /home/abc/file.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Dockerfile Shell脚本中的.env文件获取环境变量值?

来自分类Dev

如何使用bash脚本替换一个文件中的变量值?

来自分类Dev

PowerShell - 如何使用通配符获取环境变量值

来自分类Dev

如何在 Windows 操作系统的 Python 应用程序中访问环境变量值

来自分类Python

如何访问环境变量值?

来自分类Dev

如何在名称存在于另一个变量值中的变量的 shell 中打印环境变量值

来自分类Dev

无法从 shell 脚本更改环境变量值

来自分类Dev

k8s yaml文件中,如何在容器中使用环境变量

来自分类Dev

如何从Phoenix的环境文件中获取变量值?

来自分类Dev

使用Ansible打印在YAML文件中缩进的变量值

来自分类Dev

在读取特定列的csv文件时如何在Python脚本中使用变量值(整数)

来自分类Dev

在文件中存储环境变量值的最安全方法

来自分类Dev

环境变量值中的美元符号

来自分类Dev

Windows环境变量值中的引号

来自分类Java

在Java中获取环境变量值

来自分类Dev

在Dockerfile中获取环境变量值

来自分类Dev

在Powershell中检查环境变量值

来自分类Dev

如何在php中获取脚本变量值

来自分类Dev

使用星号登录环境变量值

来自分类Linux

使用awk更改no_proxy环境变量值

来自分类Dev

如何从远程 powershell C# 代码中获取环境变量值?

来自分类Linux

如何使用sed替换文本文件中声明的变量值

来自分类Dev

如何使用azure中的环境变量更新yaml文件中的变量

来自分类Dev

如何在json文件中传递bash变量值

来自分类Dev

如何在python中使用dotenv在本地.env文件中设置环境变量?

来自分类Dev

下载zip并使用Shell脚本将.js文件中的变量值替换为另一个值

来自分类Dev

如何在 Spring Boot 的 yaml 中获取环境变量

来自分类Dev

如何在Yaml文件内的键中使用环境变量

来自分类Dev

如何在python中更新变量值?

Related 相关文章

  1. 1

    如何从Dockerfile Shell脚本中的.env文件获取环境变量值?

  2. 2

    如何使用bash脚本替换一个文件中的变量值?

  3. 3

    PowerShell - 如何使用通配符获取环境变量值

  4. 4

    如何在 Windows 操作系统的 Python 应用程序中访问环境变量值

  5. 5

    如何访问环境变量值?

  6. 6

    如何在名称存在于另一个变量值中的变量的 shell 中打印环境变量值

  7. 7

    无法从 shell 脚本更改环境变量值

  8. 8

    k8s yaml文件中,如何在容器中使用环境变量

  9. 9

    如何从Phoenix的环境文件中获取变量值?

  10. 10

    使用Ansible打印在YAML文件中缩进的变量值

  11. 11

    在读取特定列的csv文件时如何在Python脚本中使用变量值(整数)

  12. 12

    在文件中存储环境变量值的最安全方法

  13. 13

    环境变量值中的美元符号

  14. 14

    Windows环境变量值中的引号

  15. 15

    在Java中获取环境变量值

  16. 16

    在Dockerfile中获取环境变量值

  17. 17

    在Powershell中检查环境变量值

  18. 18

    如何在php中获取脚本变量值

  19. 19

    使用星号登录环境变量值

  20. 20

    使用awk更改no_proxy环境变量值

  21. 21

    如何从远程 powershell C# 代码中获取环境变量值?

  22. 22

    如何使用sed替换文本文件中声明的变量值

  23. 23

    如何使用azure中的环境变量更新yaml文件中的变量

  24. 24

    如何在json文件中传递bash变量值

  25. 25

    如何在python中使用dotenv在本地.env文件中设置环境变量?

  26. 26

    下载zip并使用Shell脚本将.js文件中的变量值替换为另一个值

  27. 27

    如何在 Spring Boot 的 yaml 中获取环境变量

  28. 28

    如何在Yaml文件内的键中使用环境变量

  29. 29

    如何在python中更新变量值?

热门标签

归档