2011-12-13 24 views

Respuesta

20

No se puede pasar argumentos de línea de comandos directamente, sino que se puede elegir configuraciones de aplicaciones con bastante facilidad.

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

Llamará a la función "build_app" pasando el foo = "bar" kwarg como se esperaba. Esta función debe devolver el WSGI invocable que se usará.

+0

Gracias! Tengo aquí cuando busco cómo pasar múltiples argumentos. Resultó ser tan simple como pasarlos como valores separados por comas; por ej. '(foo =" bar ", foo1 =" bar1 ")' –

2

Normalmente lo pongo en __init.py__ después de main() y luego puedo ejecutarlo con o sin gunicornio (suponiendo que su main() es compatible con otras funciones también).

# __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() 

De esta manera puede ejecutar simplemente con p. Ej.

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

y su main() puede utilizar el código estándar que se espera que los argumentos en sys.argv.

Cuestiones relacionadas