2011-12-13 5 views
12

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

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

gunicorn mypackage:app --foo=bar 

Спасибо,

ответ

20

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

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

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

+0

Спасибо! Получилось здесь при поиске способов передачи нескольких аргументов. Оказалось, что это так же просто, как передавать их как значения, разделенные запятыми; например. '(foo =" bar ", foo1 =" bar1 ")' –

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/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.