Как выполнить скрипт Python из оболочки Django?
16 ответов
на <<
- это не так, используйте <
вместо:
$ ./manage.py shell < myscript.py
вы также можете сделать:
$ ./manage.py shell
...
>>> execfile('myscript.py')
для python3 вам нужно будет использовать
>>> exec(open('myscript.py').read())
вам не рекомендуется делать это из shell
- и это предназначено, поскольку вы не должны выполнять случайные скрипты из среды django (но там are способы обойти это, см. другие ответы).
если это сценарий, который вы будете запускать несколько раз, это хорошая идея, чтобы установить его как пользовательские команды ie
$ ./manage.py my_command
для этого создайте файл в subdir в 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-расширения
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-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()
попробуйте это, если вы используете виртуальные среды :-
python manage.py Шелл!--2-->
для использования этой команды вы должны находиться в виртуальной среде. для этого используйте: -
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 Шелл!--8--> -- или аналогичные поиски могут помочь вы.
Я должен был начать 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, которые позволяют вам писать скрипты для запуска с python manage.py runscript foobar. Более подробную информацию о реализации и структуре можно найти здесь,http://django-extensions.readthedocs.org/en/latest/index.html
Если вы хотите запустить в BG еще лучше:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
выход будет в nohup.out
Джанго.setup (), похоже, не работает.
также не требуется.
это само по себе сработало.
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")