2014-02-10 9 views
15

Ich versuche Argumente auf ein Beispiel wsgi Anwendung zu übergeben,:Pass Kommandozeilenparameter uwsgi Skript

config_file = sys.argv[1] 

def application(env, start_response): 
    start_response('200 OK', [('Content-Type','text/html')]) 
    return [b"Hello World %s" % config_file] 

Und laufen:

uwsgi --http :9090 --wsgi-file test_uwsgi.py -???? config_file # argument for wsgi script 

Jede intelligente Art und Weise ich es erreichen kann? Konnte nicht in uwsgi docs gefunden werden. Vielleicht gibt es eine andere Möglichkeit, der wsgi-Anwendung einige Parameter zur Verfügung zu stellen? (. Env Variablen sind out of scope)

Antwort

22

Python argumente:

--pyargv "foo bar"

sys.argv 
['uwsgi', 'foo', 'bar'] 

uwsgi Optionen:

--set foo = bar

uwsgi.opt['foo'] 
'bar' 
+5

Sollte Ihr nicht 'sys.argv' sein '[ 'uwsgi', 'foo', 'bar'] '? –

2

Ich landete eine env Variable aber in einem Startskript Einstellung:

def start(uwsgi_conf, app_conf, logto): 
    env = dict(os.environ) 
    env[TG_CONFIG_ENV_NAME] = app_conf 
    command = ('-c', uwsgi_conf, '--logto', logto,) 
    os.execve(os.path.join(distutils.sysconfig.get_config_var('prefix'),'bin', 'uwsgi'), command, env) 
2

Sie könnten eine .ini-Datei mit der Einstellung pyargv verwenden, die @roberto erwähnt. Lassen Sie uns unsere Konfigurationsdatei uwsgi.ini aufrufen und verwenden Sie den Inhalt:

[uwsgi] 
wsgi-file=/path/to/test_uwsgi.py 
pyargv=human 

Dann lassen Sie uns einen WGSI App erstellen, es zu testen:

import sys 
def application(env, start_response): 
    start_response('200 OK', [('Content-Type','text/html')]) 
    return [str.encode("Hello " + str(sys.argv[1]), 'utf-8')] 

können Sie sehen, wie diese Datei https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#loading-configuration-files laden:

uwsgi --ini /path/to/uwsgi.ini --http :8080 

Dann, wenn wir curl die App, können wir sehen, unsere Param Echo zurück:

$ curl http://localhost:8080 
Hello human 

Wenn Sie versuchen, argparse Stil Argumente zu Ihren WSGI App weitergeben, sie arbeiten in der .ini auch ganz gut:

pyargv=-y /config.yml