Подтвердить что ты не робот

Передайте параметры командной строки в uwsgi script

Я пытаюсь передать аргументы в пример приложения 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? (переменные извне выходят за рамки)

4b9b3361

Ответ 1

python args:

- pyargv "foo bar"

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

Параметры uwsgi:

- установить foo = bar

uwsgi.opt['foo']
'bar'

Ответ 2

В итоге я использовал переменную env, но установил ее в начале script:

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)

Ответ 3

Вы можете использовать файл .ini с параметром pyargv, о котором упоминал @roberto. Позвоните в наш конфигурационный файл 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

с --pyargv = "uwsig foo bar" все работники Python получат одинаковые параметры.

У меня 3 рабочих процесса (python). Можно ли передать разные параметры каждому работнику?

1. ['uwsgi', 'foo', 'bar'] worker 1
2. ['uwsgi', 'at', 'fun']  worker 2
3. ['uwsgi', 'three', 'car'] worker 3