web-dev-qa-db-ja.com

コマンドラインパラメータをuwsgiスクリプトに渡します

サンプルのwsgiアプリケーションに引数を渡そうとしています:

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アプリケーションにいくつかのパラメーターを提供する別の方法がありますか? (環境変数は範囲外です)

22

python引数:

--pyargv "foo bar"

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

uwsgiオプション:

--set foo = bar

uwsgi.opt['foo']
'bar'
31
roberto

@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
4
Tom Saleeba

最終的にenv変数を使用しましたが、開始スクリプト内に設定しました。

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