gpt4 book ai didi

python - python 或 perl 中的模板化配置?

转载 作者:行者123 更新时间:2023-11-28 22:04:38 27 4
gpt4 key购买 nike

我正在尝试实现模板化配置文件。我更喜欢 python,但我也会用 perl 回答。我在示例中使用了 perl。

我搜索了一下,发现 - python single configuration file - ConfigObj - python configuration file generator - ePerl但我不能从那些解决我的问题。

我正在尝试生成一个主要采用 INI 格式的配置文件(甚至没有部分):

# Comments
VAR1 = value1
EDITOR = vi

我需要从一个模板生成的,我在文本中嵌入了一种脚本语言:

# Config:
MYPWD = <: `pwd` :>

“<:”和“:>”之间的文本将使用脚本语言(python 或 perl)。与模板一样,它的标准输出被捕获并插入到生成的文本中。示例中使用的模板基本上是 eperl,但如果可用的话,我更喜欢 python。

最后,定义的变量应该是可重用的:

# Config:
CODE_HOME = /some/path
CODE_BIN = <:=$CODE_HOME:>/bin

这是我读入的测试源文件:

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# platform.cfg
# This one variable
VAR =value
# this is a templated variable. The langage is perl, but could be python.
HELLO= <: print 'World' :>
# This is a multi-line code which should resolve to a single line value.
LONGER = <:
if (1) {
print "abc ";
}
$pwd = `/bin/pwd`;
chomp($pwd);
print $pwd;
:>
# Another one to test the carriage returns.
MULTIPLE = /<: print "proj" :>/<: print "tahiti":>/<:
print "pd/1/";
$system = `grep -w VAR platform.cfg | egrep -v 'print|platform.cfg' | cut -d = -f 2-`;
chomp($system);
print $system;
:>
# variables dependent from the previous variable definition
VAR1 = <: print $VAR :>1
# variables dependent from the previous variable definition
VAR2 = <: print $VAR1 :>2
# variables dependent from the previous variable definition
VAR3 = <: print $VAR2 :>3
# variables dependent from the previous variable definition
VAR4 = <: print $VAR3 :>4
# BTW, multi-line comments are significant
# and should be preserved as the documentation for the
# variable just below:
VAR5 = <: print $VAR4 :>5
VAR6 = <: print $VAR5 :>6
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

我希望从脚本中得到这个结果。我不知道如何让配置文件中定义的变量成为解释器的一部分?

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# platform.cfg
# This one variable
VAR =value
# this is a templated variable. The langage is perl, but could be python.
HELLO= World
# This is a multi-line code which should resolve to a single line value.
LONGER = abc /src/byop/CODE
# Another one to test the carriage returns.
MULTIPLE = /proj/tahiti/pd/1/value
# variables dependent from the previous variable definition
VAR1 = value1
# variables dependent from the previous variable definition
VAR2 = value12
# variables dependent from the previous variable definition
VAR3 = value123
# variables dependent from the previous variable definition
VAR4 = value1234
# BTW, multi-line comments are significant
# and should be preserved as the documentation for the
# variable just below:
VAR5 = value12345
VAR6 = value123456
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

感谢您的建议。

最佳答案

我开发了Template::MasonLite正是为了这个目的。我生成了大量的配置文件(在我的例子中是 Apache 配置),我需要脚本在没有额外依赖的情况下在多个主机上运行。所以我开发了一个简化版的 HTML::Mason,它可以直接嵌入到我的脚本中(额外约 70 行)。 Mason templating syntax将 Perl 用于任何逻辑(条件、循环等),而不是构建一种全新的语言。

Template::MasonLite 实现不在 CPAN 上(仅在上面的链接中),因为我不想用另一个模板引擎使 CPAN 困惑,而且也不清楚模块应该有什么名称。

在我开发它时,我使用的是 cfengine,它缺乏任何合理的模板形式。我已经迁移到包含模板语言的 puppet。我仍然为 generating presentation slides 使用 Template::MasonLite| .

关于python - python 或 perl 中的模板化配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6852719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com