我需要从Django shell中执行一个Python脚本。我试着:

./manage.py shell << my_script.py

但这并没有起作用。它只是在等我写点什么。


当前回答

import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())

django.setup()

其他回答

对于使用Django 1.7+的人来说,仅仅导入设置模块似乎是不够的。

经过一番挖掘,我找到了这个Stack Overflow的答案: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在同一个文件夹中)

你可以使用DJANGO_SETTINGS_MODULE环境变量来运行脚本。这就是设置Django-shell环境所需的全部内容。

这在Django >= 1.4中是有效的

如果IPython可用(pip install IPython),那么./manage.py shell将自动使用它的shell,然后你可以使用神奇的命令%run:

%run my_script.py

@AtulVarma在不工作的接受答案下提供了一个非常有用的评论:

echo 'import myscript' | python manage.py shell

将globals().update(locals())放在import语句之后