我有一些配置文件格式化为json
一些格式化为yaml
。我希望能够读取这些配置文件,这些配置文件的值作为环境变量。例如:
{"username":"Dan", "password":"<%= ENV['DB_PASSWORD']%>"}
这意味着在从环境变量加载json文件并将<%= ENV['DB_PASSWORD']%>
替换为具体值时检索密码。在
注:1。上面提到的语法就像使用ruby的erb只是为了说明
2我更喜欢不安装新python包的原生python解决方案,但如果没有,我也会接受。
Tags:
您要寻找的通常称为模板化,您基本上定义了一种模板语言。在
根据您想要做什么,您可以使用stdlib中的^{} 库。不过,它只做简单的变量替换,与ERb相反,ERb允许任意代码(包括删除所有数据、格式化硬盘、启动后门的代码等等)。在
因此,
string.Template
不仅比ERb的能量小得多,而且更安全。您的示例已经演示了这一点,因为您甚至不能从模板中访问环境变量,所以必须显式地传递它们。在基本用法如下:
由于无法在模板内访问环境变量,因此必须将它们显式地传递到模板中:
^{pr2}$实际上,如果您想让模板访问所有环境变量,您应该能够直接传递
os.environ
dict(您可以为映射传递任何类似dict
的对象)。在如果您想要一些更强大的替换,那么您应该看看其他一些所谓的“无逻辑”模板语言(即只执行简单替换但不允许执行代码、不允许条件或循环的语言)。其中一种语言是Mustache(GitHub使用的模板语言),有许多语言的实现,包括Pystache for Python。在
如果您想要/需要更高级的特性,如循环、条件语句等,您可能需要寻找功能更全的template languages,例如Jinja。在
相关问题 更多 >
编程相关推荐