2011-07-14 12 views
4

私は自分のデータベースを移植するために実行するpythonスクリプトを持っています。私は通常、必要な依存関係のためにshell_plusの中でスクリプトを実行します。 shell_plusにスクリプトをロードして、実際にshell_plusインターフェースを開くことなく、私のlinuxコマンドラインからすべてを実行する方法はありますか?コマンドラインからshell_plusを使ってpythonスクリプトを実行しています

答えて

2
+0

$ DJANGO_SETTINGS_MODULE = myproject.settings PYTHONPATH = $ HOME/djangoprojects python myscript.pyを実行しようとしましたが、まだモデルクラスが見つからないようです。私は行方不明のものがありますか? – prostock

2

賭けてください!

shell_plusの使用をおすすめしません。私は自分のユーティリティのスクリプトを自分のappユーティリティーフォルダに保存する傾向があります。それから私は単にcronの仕事から、または必要に応じて手動で呼びます。ここに私がこれをベースにしているフレームワークスクリプトがあります。 (やや簡略化)

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import os 
import sys 
import logging 
import time 
import time 
import optparse 

# DO NOT IMPORT DJANGO MODELS HERE - THIS NEED TO HAPPEN BELOW!! 
# This needs to be able to be run when django isn't in the picture (cron) so we need 
# to be able to add in the django paths when needed. 

def getArgs(): 
    """ 
     Simply get the options for running update people. 
    """ 

    p = optparse.OptionParser() 

    help = "The Python path to a settings module, e.g. " 
    help += "\"myproject.settings.main\". If this isn't provided, the " 
    help += "DJANGO_SETTINGS_MODULE environment variable will be used." 
    p.add_option("-s", "--settings", action = "store", type = "string", 
       dest = "settings", help = help) 

    help = "A directory to add to the Python path, e.g." 
    help += " \"/home/djangoprojects/myproject\"." 
    p.add_option("-y", "--pythonpath", action = "store", type = "string", 
       dest = "pythonpath", help = help) 
    p.add_option("-v", "--verbose", action = "count", dest = "verbose", 
       help = "Turn on verbose debugging") 
    p.set_defaults(settings = os.environ.get("DJANGO_SETTINGS_MODULE", 
               "settings"), 
        pythonpath = "", verbose = 0, 
        ) 

    return p.parse_args() 


def update(opt, loglevel=None): 
    """ 
     This is the main script used for updating people 
    """ 

    start = time.time() 

    # This ensures that our sys.path is ready. 
    for path in opt.pythonpath.split(":"): 
     if os.path.abspath(path) not in sys.path and os.path.isdir(path): 
      sys.path.append(os.path.abspath(path)) 
    os.environ['DJANGO_SETTINGS_MODULE'] = opt.settings 

    from django.conf import settings  
    try: 
     if settings.SITE_ROOT not in sys.path: pass 
    except ImportError: 
     return("Your setting file cannot be imported - not in sys.path??") 

    # IMPORT YOUR CODE MODELS HERE 
    from apps.core.utility.ExampleExtractor import ExampleExtractor 

    # YOUR DJANGO STUFF GOES HERE.. 
    example = ExampleExtractor(loglevel=loglevel, singleton=not(opt.multiple)) 
    raw = example.get_raw() 
    results = example.update_django(raw) 

    log.info("Time to update %s entries : %s" % (len(results), time.time() - start)) 
    return results 


if __name__ == '__main__': 

    logging.basicConfig(format = "%(asctime)s %(levelname)-8s %(module)s \ 
     %(funcName)s %(message)s", datefmt = "%H:%M:%S", stream = sys.stderr) 
    log = logging.getLogger("") 
    log.setLevel(logging.DEBUG) 

    opts, args = getArgs() 
    sys.exit(update(opts)) 

HTH!

+0

私はちょうどこのスクリプトを使用して、それは素晴らしいです。私はDjangoを1年間プログラミングしてきましたが、コマンドラインレベルで最初に遊んだことはありませんでした。私のサイトはほぼ準備ができており、Pythonのcronジョブが必要です。私はこのスクリプトを使用して、実際にうまく走っています。おかげでrh0dium – Rich

関連する問題