我可以使用distutils为我的python应用程序生成配置文件吗?

时间:2015-01-27 23:42:17

标签: python supervisord

我创建了一个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

的命令行参数

我试过谷歌搜索这个并且没有多少运气。 任何人都可以给我一个研究这个的起点吗?

1 个答案:

答案 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循环和其他逻辑一起使用。