запуск скрипта python через shell_plus из командной строки - PullRequest
4 голосов
/ 15 июля 2011

У меня есть скрипт на python, который я запускаю для заполнения своей базы данных. Я обычно запускаю скрипт внутри shell_plus из-за необходимых зависимостей. Есть ли способ загрузить скрипт в shell_plus и запустить все из моей командной строки linux, фактически не открывая интерфейс shell_plus?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вы держите пари!

Я даже не рекомендую использовать shell_plus. Я склонен хранить свои служебные сценарии в папке служебной программы. Затем я просто вызываю их по заданию 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))

НТН!

2 голосов
/ 15 июля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...