Как выполнить скрипт Python из оболочки Django?

Мне нужно выполнить скрипт Python из оболочки Django. Я пытался:

./manage.py shell << my_script.py 

Но это не сработало. Я просто ждал, чтобы я что-то написал.

16 Solutions collect form web for “Как выполнить скрипт Python из оболочки Django?”

< < часть неверна, используйте < вместо:

 $ ./manage.py shell < myscript.py 

Вы также можете сделать:

 $ ./manage.py shell ... >>> execfile('myscript.py') 

Для python3 вам нужно будет использовать

 >>> exec(open('myscript.py').read()) 

Вам не рекомендуется делать это из shell и это подразумевается, поскольку вы не должны выполнять случайные скрипты из среды django (но есть способы обойти это, см. Другие ответы).

Если это скрипт, который вы будете запускать несколько раз, рекомендуется настроить его как пользовательскую команду, т.е.

  $ ./manage.py my_command 

для этого создайте файл в поддире management и commands вашего app , т. е.

 my_app/ __init__.py models.py management/ __init__.py commands/ __init__.py my_command.py tests.py views.py 

и в этом файле определите свою пользовательскую команду (убедитесь, что имя файла является именем команды, которую вы хотите выполнить из ./manage.py )

 from django.core.management.base import BaseCommand class Command(BaseCommand): def handle_noargs(self, **options): # now do the things that you want with your models here 

Для тех, кто использует Django 1.7+, кажется, что просто импортировать модуль настроек недостаточно.

После некоторого копания я нашел этот ответ переполнения стека: https://stackoverflow.com/a/23241093

Теперь вам нужно:

 import os, django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") django.setup() # now your code can go here... 

Не делая выше, я получал ошибку django.core.exceptions.AppRegistryNoReady .

Мой файл сценария находится в том же каталоге, что и мой проект django (т. Е. В той же папке, что и manage.py)

Я опаздываю на вечеринку, но надеюсь, что мой ответ поможет кому-то: вы можете сделать это в своем скрипте Python:

 import sys, os sys.path.append('/path/to/your/django/app') os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from django.conf import settings 

остальная часть вашего материала идет сюда ….

runscript из django-extensions

 python manage.py runscript scripty.py 

Пример script.py для его проверки:

 from django.contrib.auth.models import User print(User.objects.values()) 

Упомянуто: http://django-extensions.readthedocs.io/en/latest/command_extensions.html и задокументировано по адресу:

 python manage.py runscript --help 

Есть также учебник .

Протестировано на Django 1.9.6, django-extensions 1.6.7.

Вы можете просто запустить скрипт с DJANGO_SETTINGS_MODULE переменных среды DJANGO_SETTINGS_MODULE . Это все, что нужно, чтобы настроить среду Django-shell.

Это работает в Django> = 1.4

Если IPython доступен ( pip install ipython ), то ./manage.py shell будет автоматически использовать свою оболочку, а затем вы можете использовать магическую команду %run :

 %run my_script.py 

@AtulVarma предоставил очень полезный комментарий по неработающему принятому ответу :

 echo 'import myscript' | python manage.py shell 

Обратите внимание: этот метод устарел для более поздних версий django! (> 1,3)

Альтернативный ответ, вы можете добавить это в начало my_script.py

 from django.core.management import setup_environ import settings setup_environ(settings) 

и выполните my_script.py только с помощью python в каталоге, где у вас есть settings.py но это немного взломано.

 $ python my_script.py 
 import os, sys, django os.environ["DJANGO_SETTINGS_MODULE"] = "settings" sys.path.insert(0, os.getcwd()) django.setup() 

Попробуйте это, если вы используете виртуальную среду: –

shell python manage.py

для использования этой команды вы должны находиться внутри виртуальной среды. для этого использования: –

workon vir_env_name

например :-

 dc@dc-comp-4:~/mysite$ workon jango (jango)dc@dc-comp-4:~/mysite$ python manage.py shell Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> 

Примечание : – Здесь mysite – это мое имя веб-сайта, а jango – мое виртуальное имя

Поскольку другие ответы указывают, но явно не указывают, что вам действительно нужно, необязательно выполнять ваш скрипт из оболочки Django, но для доступа к вашим приложениям без использования оболочки Django .

Это отличается от версии Django версией Django. Если вы не нашли свое решение в этой теме, ответы здесь – сценарий Django для доступа к объектам модели без использования оболочки manage.py или похожих запросов может помочь вам.

Мне пришлось начинать my_command.py с

 import os,sys sys.path.append('/path/to/myproject') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file") import django django.setup() import project.app.models #do things with my models, yay 

а затем запустил python3 my_command.py

(Django 2.0.2)

если в вашем скрипте не много команд, используйте его:

 manage.py shell --command="import django; print(django.__version__)" 

Документы Django

Что-то, что мне показалось интересным, это Django Scripts, который позволяет писать сценарии для запуска с помощью python manage.py. Более подробную информацию о реализации и структуре можно найти здесь: http://django-extensions.readthedocs.org/en/latest/index.html

Если вы хотите работать в BG еще лучше:

 nohup echo 'exec(open("my_script.py").read())' | python manage.py shell & 

Выход будет в nohup.out

django.setup (), похоже, не работает.

также не требуется.

это само по себе работало.

 import os, django, glob, sys, shelve os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings") 
  • Как я могу установить python-dev без sudo?
  • Pandas groupby diff
  • NoReverseMatch с аргументом ключевого слова uidb64 с Django 2.0
  • Как добавить дополнительный столбец в массив NumPy
  • Смутно о __str__ в списке в Python
  • Смешивание файлов и циклов
  • Не удалось установить пакеты Python
  • Получить индекс столбца от имени столбца в python pandas
  • Взорвать / сшить ряд строк
  • models.py становится огромным, что является лучшим способом разбить его?
  • Как я могу обновить установку Python по умолчанию или исправить мой $ PATH на Mac OS X 10.6.7?
  • Давайте будем гением компьютера.