Как запустить произвольный код при запуске оболочки 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 при запуске будут загружены каталоги.