【问题标题】:How i can use environment variables on .ini file in Pyramid?如何在 Pyramid 的 .ini 文件中使用环境变量?
【发布时间】:2018-05-26 00:22:23
【问题描述】:

例如,现在我有这个 .ini 文件:

[DEFAULT]
db_user = user_test
db_password = psw_test
db_host = localhost
db_name = db_test

...

我想做:

export ENV_DB_USER=user_test
export ENV_DB_PSW=psw_test
export ENV_DB_HOST=localhost
export ENV_DB_NAME=db_test

然后我想在 .ini 文件中做这样的事情:

[DEFAULT]
db_user = ${ENV_DB_USER}
db_password = ${ENV_DB_PSW}
db_host = ${ENV_DB_HOST}
db_name = ${ENV_DB_NAME}

...

我尝试使用 %()s 语法,但不幸的是没有用。 我哪里做错了?

谢谢:)

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

    不幸的是,它们现在不受支持 - 您必须在运行时而不是在 ini 文件本身中加载它们。我的应用程序中的一种常见方法是定义一个render-config 脚本,该脚本采用site.ini.in 模板并使用jinja2 将其渲染到site.ini,并提供可用的环境变量。这不是很令人满意,但效果很好。

    import jinja2
    import os
    
    def multiline(val):
        lines = (l.strip() for l in val.strip().split('\n'))
        return '\n    ' + '\n    '.join(lines)
    
    def main(cli, args):
        env = jinja2.Environment(
            loader=jinja2.FileSystemLoader(os.getcwd()),
            undefined=jinja2.StrictUndefined,
        )
        env.filters['multiline'] = multiline
    
        template = env.get_template(args.template)
        result = template.render({
            'env': os.environ,
        })
    
        with open(args.config_file, 'w', encoding='utf8') as fp:
            fp.write(result)
    

    【讨论】:

    • 谢谢!我也在初始化文件settings['var_config] = os.getenv('ENV_VAR')config = Configurator(settings=settings)中解决了这段代码
    猜你喜欢
    • 2013-06-11
    • 2016-10-19
    • 2018-10-18
    • 2014-02-15
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多