2014-02-10 228 views
15

我想傳遞參數給一個例子WSGI應用:傳遞命令行參數uwsgi腳本

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] 

並運行:

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

任何聰明的辦法我能做到嗎?無法在uwsgi文檔中找到它。也許有另一種方式爲wsgi應用程序提供一些參數? (ENV變量超出範圍)

回答

22

蟒蛇ARGS:

--pyargv 「富巴」

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

uwsgi選項:

--set富=酒吧

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

應該不是你的'sys.argv'是'[「uwsgi」, 'foo','bar']'? –

2

我最終使用的環境變量,但它設置一個啓動腳本中:

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

您可以使用@roberto提到的pyargv設置.ini文件。讓我們把我們的配置文件uwsgi.ini和使用內容:

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

然後讓我們創建一個WGSI應用程序進行測試:

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')] 

你可以看到如何加載該文件https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html#loading-configuration-files

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

然後當我們curl的應用程序,我們可以看到我們的參數回顯:

$ curl http://localhost:8080 
Hello human 

如果你想argparse風格參數傳遞給你的WSGI應用程序,他們在.ini也工作得很好:

pyargv=-y /config.yml 
相關問題