使用与gunicorn的其他命令行参数

时间:2011-12-13 19:58:47

标签: python flask gunicorn

假设我按照http://gunicorn.org/deploy.html#runit在gunicorn下启动Flask应用程序,有没有办法让我包含/解析/访问其他命令行参数?

例如,我可以以某种方式在Flask应用程序中包含和解析foo选项吗?

gunicorn mypackage:app --foo=bar

谢谢,

2 个答案:

答案 0 :(得分:27)

您无法直接传递命令行参数,但您可以轻松地选择应用程序配置。

$ gunicorn 'mypackage:build_app(foo="bar")'

将调用函数" build_app"通过foo =" bar" kwarg如预期的那样。然后,此函数应返回将被使用的WSGI callable。

答案 1 :(得分:3)

我通常在__init.py__之后将其放入main(),然后我可以使用或不使用gunicorn(假设您的main()也支持其他功能)。

# __init__.py

# Normal entry point
def main():
  ...

# Gunicorn entry point generator
def app(*args, **kwargs):
    # Gunicorn CLI args are useless.
    # https://stackoverflow.com/questions/8495367/
    #
    # Start the application in modified environment.
    # https://stackoverflow.com/questions/18668947/
    #
    import sys
    sys.argv = ['--gunicorn']
    for k in kwargs:
        sys.argv.append("--" + k)
        sys.argv.append(kwargs[k])
    return main()

通过这种方式,你可以简单地运行。

gunicorn 'app(foo=bar)' ...

并且您的main()可以使用期望sys.argv中的参数的标准代码。