可以通过编程方式启动Django开发服务器吗?

时间:2017-04-09 09:46:37

标签: python django

我正在尝试从我的包中的另一个模块启动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()的每一种方式都失败了。

有什么想法吗?

1 个答案:

答案 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']