Как запустить произвольный код при запуске оболочки django?
такой вопрос: автоматический импорт моделей на Django shell launch есть ответы, объясняющие, как импортировать модели при запуске с помощью shell_plus, но нет ответа о том, как запустить код в целом.
но есть ли простой способ просто запустить скрипт python?
python manage.py shell [or shell_plus] --run=script.py
просто запустил бы сценарий, как если бы вы ввели все это, когда оболочка началась.
Я понимаю, что вы можете импортировать вещи в оболочке, но потом они застряли в пространство имен.
Я бы подумал, что ipython должен иметь способ запустить скрипт, а затем импортировать его locals()
в пространстве имен верхнего уровня. В этом случае вы могли бы просто сделать %magic script.py
и мы бы спустились всего на один шаг, что было бы хорошо.
изменение способа запуска оболочки должно быть прекрасным - основная цель состоит в том, чтобы просто создать файл, который запускается при запуске оболочки.
4 ответов
не уверен, что есть флаг, который вы можете использовать, но если у вас установлен ipython, он должен быть таким же простым, как:
ipython
затем, когда вы в командной строке:
run script.py
затем:
run manage.py shell
вы можете создать свою собственную команду так же, как shell_plus
сделал: вижу источник на чтобы увидеть, как. В этом коде вы можете указать и запустить файл, который необходимо выполнить перед запуском оболочки. Также полезна документация Django на создание пользовательских команд.
вы можете попробовать использовать переменную среды PYTHONSTARTUP. Также попробуйте django-extensions:django-расширения
см django-extensions/management/commands/shell_plus.py командование.
из исходного кода этой команды я вижу, что она уважает переменную PYTHONSTARTUP env.
shell_plus использует ограниченную форму IPython, которая не обрабатывает его запуск и конфигурацию, что побеждает большинство обычных попыток запуска вещей при запуске оболочки django+ipython. Вы можете переключить его на использование полной версии, которая решит большинство проблем.
изменить django_extensions/management/commands/shell_plus.py
удалить:
embed(user_ns=imported_objects)
и замените его на:
from IPython import start_ipython
start_ipython(argv=[], user_ns=imported_objects)
затем ваш код python при запуске будут загружены каталоги.