Мне нужно выполнить скрипт Python из оболочки Django. Я попытался:
./manage.py shell << my_script.py
Но это не сработало. Просто ждал, что я что-нибудь напишу.
python
django
django-shell
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
источник
django
работает, что вы на самом деле хотите сделать?my_script.py
содержит несколько операций над одной из моих моделей Django. Я уже делал это раньше, но не могу вспомнить, как именно.Ответы:
<<
Часть неправильна, используйте<
вместо этого:Вы также можете сделать:
Для python3 вам нужно использовать
источник
./manage.py shell <<EOF\ execfile('myscript.py') \EOF
echo 'import myscript' | python manage.py shell
. Я обнаружил, что это может быть полезно для быстрых и грязных сценариев, которые нужно запускать только один раз, без необходимости выполнять трудоемкий процесс созданияmanage.py
команды.Get-Content myscript.py | .\manage.py shell
Вы не рекомендуется делать это из
shell
- и это предназначено , как вы не должны действительно быть выполнение случайных сценариев из среды Джанго (но есть способы обойти это, смотрите другие ответы).Если это скрипт, который вы будете запускать несколько раз, рекомендуется установить его как пользовательскую команду, т.е.
чтобы сделать это создать файл в подпапке
management
иcommands
из вашегоapp
, т.е.и в этом файле определите свою пользовательскую команду (убедитесь, что имя файла - это имя команды, из которой вы хотите выполнить
./manage.py
)источник
NoArgsCommand
устарела. На этой странице приведен рабочий пример: docs.djangoproject.com/en/1.9/howto/custom-management-commands/…def handle_noargs(self, **options):
наdef handle(self, **options):
.def handle(self, **options):
комментарий Джеймса.Для тех, кто использует Django 1.7+, кажется, что просто импортировать модуль настроек недостаточно.
После некоторого поиска я нашел ответ на переполнение стека: https://stackoverflow.com/a/23241093
Теперь вам нужно:
Не делая выше, я получил
django.core.exceptions.AppRegistryNoReady
ошибку.Мой файл скрипта находится в той же директории, что и мой проект django (т.е. в той же папке, что и manage.py)
источник
DJANGO_SETTINGS_MODULE
переменной окружения. С этим было достаточно просто:import django ; django.setup()
под 1.7.django.setup()
не позволит скрипт получить доступ к моделям Django, даже не импортировать их!import django; django.setup()
.Я опаздываю на вечеринку, но надеюсь, что мой ответ кому-нибудь поможет: вы можете сделать это в своем скрипте Python:
остальная часть ваших вещей идет сюда ....
источник
sys.path.append
материал, если у вас все получитсяDJANGO_SETTINGS_MODULES
(например, если у вас есть скрипт, расположенный прямо над корнем сайта, вы можете это сделатьos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
).sys.path.append(os.getcwd())
, это работает, когда я нахожусь в каталоге моего проекта, мой DJANGO_SETTINGS_MODULE правильный, и я пытаюсь запустить скрипт, который импортирует модели, виды и т. Д.runscript
из джанго-расширенийОбразец,
script.py
чтобы проверить это:Упоминается по адресу: http://django-extensions.readthedocs.io/en/latest/command_extensions.html и документируется по адресу:
Также есть учебник .
Протестировано на Django 1.9.6, django-extensions 1.6.7.
источник
django-extensions
(вы должны). Примечание: похоже,runscript
использует стандартный djangoshell
. Было бы замечательно, если бы он использовалshell_plus
(также в расширениях), чтобы вам не пришлось импортировать все для простых скриптов.Если доступен IPython (
pip install ipython
), он./manage.py shell
автоматически использует его оболочку, а затем вы можете использовать магическую команду%run
:источник
runscript
что он работает со сценариями вне проекта / пакета и не жалуется, как этоTypeError: the 'package' argument is required to perform a relative import for
Вы можете просто запустить скрипт с установленной
DJANGO_SETTINGS_MODULE
переменной окружения. Это все, что нужно для настройки окружения Django-shell.Это работает в Django> = 1.4
источник
@AtulVarma предоставил очень полезный комментарий под нерабочим принятым ответом :
источник
если в вашем скрипте не так много команд, используйте его:
Джанго документы
источник
Как указывают другие ответы, но не указывают явно, что вам на самом деле может потребоваться не обязательно выполнение скрипта из оболочки Django, а доступ к вашим приложениям без использования оболочки Django .
Это сильно отличается от версии Django к версии Django. Если вы не нашли своего решения в этой теме, ответьте здесь - скрипт Django для доступа к объектам модели без использования оболочки manage.py - или подобные поиски могут вам помочь.
Я должен был начать my_command.py с
а потом побежал
python3 my_command.py
(Джанго 2.0.2)
источник
sys.path.append('/path/to/myproject')
наBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
и `sys.path.append (BASE_DIR)`. Также не забудьте активировать виртуальную среду перед выполнением команды!источник
Обратите внимание, этот метод не рекомендуется использовать для более поздних версий django! (> 1,3)
Альтернативный ответ, вы можете добавить это в начало
my_script.py
и выполнить
my_script.py
только с Python в каталоге, где у вас есть,settings.py
но это немного глупо.источник
Если вы хотите, чтобы работать в BG еще лучше:
Выход будет в
nohup.out
источник
Что-то, что мне показалось интересным, это Django Scripts, который позволяет вам писать скрипты для запуска с помощью python manage.py runcript foobar. Более подробную информацию о реализации и структуре можно найти здесь, http://django-extensions.readthedocs.org/en/latest/index.html.
источник
Попробуйте это, если вы используете виртуальную среду: -
для использования этих команд вы должны быть в виртуальной среде. для этого используйте: -
например :-
Примечание : - Здесь mysite - это имя моего сайта, а jango - имя моей виртуальной среды.
источник
пришел сюда с тем же вопросом, что и ОП, и я нашел свой любимый ответ именно в ошибке в вопросе, которая работает также в Python 3:
источник
Другой способ выполнить это:
Это работает на Python2.7 и Django1.9
источник
Если вы хотите запустить скрипт запуска (например, импортировать некоторые модели django для интерактивной работы с ними) и остаться в оболочке django:
источник
Оболочка django - это хороший способ выполнения модуля python со средой django, но не всегда легко и утомительно импортировать модули и выполнять функции вручную, особенно без автозаполнения. Чтобы решить эту проблему, я создал небольшой сценарий оболочки "runcript.sh", который позволяет в полной мере воспользоваться преимуществами автозаполнения и истории журналов консоли Linux.
NB. Скопируйте файл runcript.sh в корневой проект и установите право на выполнение (chmod + x).
Например: я хочу запустить функцию python с именем show (a, b, c) в модуле do_somethings.py в myapp / do_folder /
Стандартный способ django (manage.py shell):
С помощью скрипта (runcript.sh):
Сценарий не ограничен в количестве аргументов. Однако поддерживаются только аргументы примитивных типов (int, float, string)
источник
runscript
изdjango-extensions
пакета сделать то же самое, проверьте это django-extensions.readthedocs.io/en/latest/runscript.htmlПоздно на вечеринку. Но это может быть полезно для кого-то.
Все, что вам нужно, это ваш скрипт и
django-extensions
установлен.Просто запустите
shell_plus
доступныйdjango_extensions
и импортируйте скрипт, который вы написали.Если ваш скрипт находится
scpt.py
внутри папки,fol
вы можете запустить скрипт следующим образом.и просто импортируйте ваш скрипт в оболочку следующим образом.
источник
Кажется, django.setup () не работает.
Похоже, не требуется.
это одно сработало.
источник