我正在尝试从我的包中的另一个模块启动django开发服务器。我的模块可以导入manage.py,我想执行等效的manage.py runserver
而不使用子进程或任何类型的东西(为什么?见下文)。
目前我能想出的最佳解决方案是使用子流程:
def run_with_default_settings():
import inspect
import subprocess
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
subprocess.Popen(['python', 'manage.py', 'runserver'], cwd=currentdir)
然而,这个解决方案在我看来相当复杂,更重要的是它不是平台无关的(例如,如果有人同时拥有python 2和python 3而python
被定义为python 3 ;或者如果在环境路径中没有定义python
......等等。)。
我在网上找不到任何解决方案,我试图运行execute_from_command_line()
的每一种方式都失败了。
有什么想法吗?
答案 0 :(得分:0)
是。只需执行manage.py
:
import os
from django.core.management import execute_from_command_line
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'web.settings')
execute_from_command_line(list_of_args)
这应该可以正常工作。请记住,execute_from_command_line
最初接受sys.argv
作为参数,因此命令runserver
位于索引 1 上:
list_of_args = ['', 'runserver']