2017-04-09 82 views
0

我想從包中的另一個模塊啓動django開發服務器。我的模塊可以導入manage.py,並且我希望執行manage.py runserver的等效命令,而不使用子進程或其他任何類型(爲什麼?請參見下文)。Django開發服務器是否可以以編程方式啓動?

目前我能想出的最好的解決方案是使用子:

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未在環境PATH中定義...等)。

我在網上找不到任何解決方案,並且我試圖運行execute_from_command_line()的每種方式都失敗了。

任何想法?

回答

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是對指數:

list_of_args = ['', 'runserver'] 
+0

不幸的是這僅適用,至少在我的情況下,如果導入模塊在同一個目錄中'manage.py'駐留。否則,所有django導入都會失敗: 「File」C:\ Python27 \ lib \ importlib \ __ init__.py「,第37行,位於import_module __import __(名稱) ImportError:沒有名爲fitter.apps的模塊 –

相關問題