我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
当前回答
另一种方式是执行这个
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
它在Python2.7和Django1.9上运行
其他回答
我带着与OP相同的问题来到这里,而我恰恰在问题中的错误中找到了我最喜欢的答案,这在Python 3中也适用:
./manage.py shell <<EOF
import my_script
my_script.main()
EOF
<<部分是错误的,用<代替:
$ ./manage.py shell < myscript.py
你还可以:
$ ./manage.py shell
...
>>> execfile('myscript.py')
对于python3,您需要使用
>>> exec(open('myscript.py').read())
正如其他答案所指出但没有明确指出的那样,你实际上需要的不一定是从Django shell中执行脚本,而是在不使用Django shell的情况下访问应用程序。
这在Django版本和Django版本之间有很大不同。如果你在这篇文章中没有找到你的解决方案,答案在这里—— Django脚本访问模型对象,而不使用manage.py shell ——或者类似的搜索可能对你有帮助。
我必须以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)
将globals().update(locals())放在import语句之后
我迟到了,但我希望我的回答能帮助到别人: 你可以在你的Python脚本中这样做:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
你的其他东西在这里....