有没有办法在 Django 应用程序 mod_wsgi 服务器启动期间传递选项值
Is there a way to pass options values during mod_wsgi server start up in Django app
我正在使用 mod_wsgi 到 运行 我的 Django 应用程序。由于有很多选项可以定义何时触发服务器 运行 命令,我试图创建某种 python 脚本来传递选项及其预设值。
例如:
而不是使用:
$python3 manage.py runmodwsgi --processes 3 --threads 1
我正在尝试使用 python 脚本并将其用作:
$python3 runme.py
其中 runme.py 是我试图用来启动服务器的脚本文件。
到目前为止我做了什么?
创建脚本文件:
import os
from django.core.management import execute_from_command_line
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'
list_of_args = ['', myargs]
execute_from_command_line(list_of_args)
正如预期的那样,服务器以预设选项启动,例如:
现在我想要实现的是某些选项的传递值,例如:
--processes 3 --threads 1
等等。
有什么方法可以传递预设值(因为我可以在我的脚本文件 runme.py 中定义),比如添加到参数列表:
list_of_args = ['', myargs, addl_args]
除了 python 站点上提供的帮助之外,我一直在检查发布的 SO 查询,但无法解决问题。
我尝试了以下方法,但不是很有用:
import os
import argparse # New import
from django.core.management import execute_from_command_line
# Addition of new code lines
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-p", "--processes", action="store_true")
group.add_argument("-t", "--threads", action="store_true")
parser.add_argument("pint", type=int, help="no. of processes")
parser.add_argument("tint", type=int, help="no. of threads")
args = parser.parse_args()
# End of new code
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'
# At this line if I add ", args" (like shown below:])
list_of_args = ['', myargs, args]
execute_from_command_line(list_of_args)
和运行命令,出现错误:
TypeError: 'Namespace' object does not support indexing
如果我只是 运行: python3 runme.py
,我会得到以下错误:
usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: the following arguments are required: pint, tint
然而,使用
python3 runme.py 3 1
启动服务器,但选项整数“3”和“1”没有任何效果(正如预期的进程和线程数)。
如果我使用:
python3 runme.py --processes 3 --threads 1
我收到以下错误:
usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: argument -t/--threads: not allowed with argument -p/--processes
尝试使用单个参数,例如:
python3 runme.py --processes 3 1
服务器此时启动但选项value/s不受影响。
如何定义选项值并将这些选项的预设值传递给运行命令?
看起来你只是 misunderstanding/misusing argparse。
import os
import sys
import argparse
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--processes", type=int, default=1)
parser.add_argument("-t", "--threads", type=int, default=1)
args = parser.parse_args()
from django.core.management import execute_from_command_line
command = [sys.argv[0], 'runmodwsgi', '--processes', str(args.processes), '--threads', str(args.threads)]
execute_from_command_line(command)
可能更接近你想要的;它将默认进程和线程都为 1。
我正在使用 mod_wsgi 到 运行 我的 Django 应用程序。由于有很多选项可以定义何时触发服务器 运行 命令,我试图创建某种 python 脚本来传递选项及其预设值。
例如:
而不是使用:
$python3 manage.py runmodwsgi --processes 3 --threads 1
我正在尝试使用 python 脚本并将其用作:
$python3 runme.py
其中 runme.py 是我试图用来启动服务器的脚本文件。
到目前为止我做了什么?
创建脚本文件:
import os
from django.core.management import execute_from_command_line
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'
list_of_args = ['', myargs]
execute_from_command_line(list_of_args)
正如预期的那样,服务器以预设选项启动,例如:
现在我想要实现的是某些选项的传递值,例如:
--processes 3 --threads 1
等等。
有什么方法可以传递预设值(因为我可以在我的脚本文件 runme.py 中定义),比如添加到参数列表:
list_of_args = ['', myargs, addl_args]
除了 python 站点上提供的帮助之外,我一直在检查发布的 SO 查询,但无法解决问题。
我尝试了以下方法,但不是很有用:
import os
import argparse # New import
from django.core.management import execute_from_command_line
# Addition of new code lines
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-p", "--processes", action="store_true")
group.add_argument("-t", "--threads", action="store_true")
parser.add_argument("pint", type=int, help="no. of processes")
parser.add_argument("tint", type=int, help="no. of threads")
args = parser.parse_args()
# End of new code
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
myargs = 'runmodwsgi'
# At this line if I add ", args" (like shown below:])
list_of_args = ['', myargs, args]
execute_from_command_line(list_of_args)
和运行命令,出现错误:
TypeError: 'Namespace' object does not support indexing
如果我只是 运行: python3 runme.py
,我会得到以下错误:
usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: the following arguments are required: pint, tint
然而,使用
python3 runme.py 3 1
启动服务器,但选项整数“3”和“1”没有任何效果(正如预期的进程和线程数)。
如果我使用:
python3 runme.py --processes 3 --threads 1
我收到以下错误:
usage: runme.py [-h] [-p | -t] pint tint
runme.py: error: argument -t/--threads: not allowed with argument -p/--processes
尝试使用单个参数,例如:
python3 runme.py --processes 3 1
服务器此时启动但选项value/s不受影响。
如何定义选项值并将这些选项的预设值传递给运行命令?
看起来你只是 misunderstanding/misusing argparse。
import os
import sys
import argparse
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<proj>.settings')
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--processes", type=int, default=1)
parser.add_argument("-t", "--threads", type=int, default=1)
args = parser.parse_args()
from django.core.management import execute_from_command_line
command = [sys.argv[0], 'runmodwsgi', '--processes', str(args.processes), '--threads', str(args.threads)]
execute_from_command_line(command)
可能更接近你想要的;它将默认进程和线程都为 1。