我创建了一个python应用程序,它将作为由supervisord管理的服务运行。
问题是我需要在安装时自定义supervisord的配置文件。配置文件包含应用程序的参数,这些参数将包括将在安装时决定(通过命令行参数)的文件的路径。还有其他论点也应该在安装时决定。
我想将conf文件包含为'宏'将conf文件复制到目标
时将在安装时替换的值例如,假设我有一个conf文件模板,例如' myapp.conf.template':
[program:myapp]
command=python APP_INSTALL_LOCATION --log_file=LOG_FILE_PATH
user=EXECUTING_USER
我希望在安装后生成一个看起来像这样的myapp.conf:
[program:myapp]
command=python /usr/local/myapp --log_file=/var/log/myapp.log
user=dusktreader
我希望这些替换基于setup.py
的命令行参数我试过谷歌搜索这个并且没有多少运气。 任何人都可以给我一个研究这个的起点吗?
答案 0 :(得分:0)
您可以使用Jinja2
等模板语言来阅读模板并生成可在安装时自定义的新文件:
# These values can be read from a file or environment variables
template_kwargs = {
'logging_root': '/path/to/logging/'
'program_name': 'example',
}
with open(path_conf_template) as conf_template:
template = jinja2.Template(conf_template.read())
with open(path_conf, 'w') as conf_template_output:
conf_template_output.write(template.render(**template_kwargs))
在模板中,您可以使用变量构造值:
stdout_logfile={{ logging_root }}{{ program_name }}.log
这意味着您可以将Jinja2模板语言与模板中的for循环和其他逻辑一起使用。