Использование дополнительных аргументов командной строки с gunicorn - PullRequest
16 голосов
/ 13 декабря 2011

Если я запускаю приложение Flask под gunicorn согласно http://gunicorn.org/deploy.html#runit,, есть ли способ включить / parse / access дополнительные аргументы командной строки?

Например, можно ли как-нибудь включить и проанализировать параметр foo в моем приложении Flask?

gunicorn mypackage:app --foo=bar

Спасибо

Ответы [ 2 ]

27 голосов
/ 14 декабря 2011

Вы не можете передавать аргументы командной строки напрямую, но вы можете достаточно легко выбирать конфигурации приложения.

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

Вызовет функцию "build_app", передающую koog foo = "bar", как и ожидалось.Эта функция должна затем вернуть вызываемый WSGI, который будет использоваться.

4 голосов
/ 21 сентября 2017

Я обычно помещаю его в __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.
    # /8202975/ispolzovanie-dopolnitelnyh-argumentov-komandnoi-stroki-s-gunicorn
    #
    # 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...