Подтвердить что ты не робот

Использование дополнительных аргументов командной строки с помощью пушки

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

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

gunicorn mypackage:app --foo=bar

Спасибо,

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я обычно помещаю его в __init.py__ после main(), а затем могу запускать с или без пушки (при условии, что ваш main() также поддерживает другие функции).

# __init__.py

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

# Gunicorn entry point generator
def app(*args, **kwargs):
    # Gunicorn CLI args are useless.
    # https://stackoverflow.com/info/8495367/
    #
    # Start the application in modified environment.
    # https://stackoverflow.com/info/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.