Использование дополнительных аргументов командной строки с помощью пушки
Предполагая, что я запускаю приложение Flask под стрельбой по http://gunicorn.org/deploy.html#runit, есть ли способ включить/разбор/получить доступ к дополнительным аргументам командной строки?
Например, могу ли я как-то включить и проанализировать параметр foo
в моем приложении Flask?
gunicorn mypackage:app --foo=bar
Спасибо,
Ответы
Ответ 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
.