2014-03-13 32 views
3

我有一個獨立的腳本,我需要在Django環境中運行。它使用數據庫Orm等。當我嘗試運行它時,它開始抱怨from .generators import thread_generator。所以,顯然它不在Django環境中。我搜索了很多東西,但仍然沒有成功。目前,我正在嘗試下面的成功。我甚至不確定bot_server.local是否正確,或者它應該是bot_server.settings。但是,我在設置中使用了local.py。我無法將其作爲命令運行,因爲對於我的使用,我需要將其作爲獨立腳本運行。我需要在腳本中永久保存這個文件,而不是像臨時文件那樣的shell環境。Django 1.6在Django環境中運行獨立腳本 - 沒有成功

from functools import wraps 
import sys 
import os 
import datetime 
import base64 
import json 
from django.db import connection 
from django.core.management.base import BaseCommand, CommandError 
from .generators import thread_generator 
from .do_request import do_request 
from .models import Employee, ThreadVault 

if __name__ == '__main__': 
    os.environ['DJANGO_SETTINGS_MODULE'] = "bot_server.local" 
    sys.path.append("/home/git/bot_server/bot_server") 
+2

你可以發佈追蹤?出於好奇:在什麼樣的用例中,你必須使用Django環境來運行一個獨立的腳本,你不能使用管理命令? – knbk

回答

2

答案其實很簡單......只是貼上什麼是manage.py:

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bot_server.settings.local") 

    from django.core.management import execute_from_command_line 

隨着我看過的所有帖子,我簡直不敢相信,這不是前面提到的。

1

是這個答案是製作簡單

manage.py文件作爲初級講座

#!/usr/bin/env python 

from settings.common import PROJECT_ROOT 
import os 
import sys 


os.chdir(PROJECT_ROOT) 
sys.path.insert(0, os.path.abspath(os.path.join(PROJECT_ROOT, ".."))) 

for i, arg in enumerate(sys.argv): 
    if arg.startswith("--site"): 
     os.environ["MEZZANINE_SITE_ID"] = arg.split("=")[1] 
     sys.argv.pop(i) 

if __name__ == "__main__": 
    settings_module = "settings.common" 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module) 
    from django.core.management import execute_from_command_line 
    execute_from_command_line(sys.argv) 
3

您啓動腳本運行之前,你只需要編寫代碼的獨立腳本。執行獨立腳本的問題是它找不到django環境所以提供這個我們需要追加設置文件。

//Start your code here 

import os, sys 
from os import path 

proj_path = "project_path\project_name" 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings") 
sys.path.append(proj_path) 
os.chdir(proj_path) 

from django.core.wsgi import get_wsgi_application 

from app1.models import * 
from app2.models import model_name 
from app3.models import model_name1, model_name2 

application = get_wsgi_application() 

//Start your script from here 
相關問題