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

./manage.py shell << my_script.py

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


当前回答

迟到了。但这可能对某些人有帮助。

你只需要安装好脚本和django扩展。

只需运行django_extensions中可用的shell_plus,并导入您所编写的脚本。

如果你的脚本是scpt.py,并且它在foll文件夹中,你可以像下面这样运行脚本。

python manage.py shell_plus

然后在shell中导入脚本,如下所示。

>>> from fol import scpt

其他回答

迟到了。但这可能对某些人有帮助。

你只需要安装好脚本和django扩展。

只需运行django_extensions中可用的shell_plus,并导入您所编写的脚本。

如果你的脚本是scpt.py,并且它在foll文件夹中,你可以像下面这样运行脚本。

python manage.py shell_plus

然后在shell中导入脚本,如下所示。

>>> from fol import scpt

对于使用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中是有效的

从django-extensions运行脚本

python manage.py runscript scripty.py

一个示例script.py来测试它:

from django.contrib.auth.models import User
print(User.objects.values())

提及地址:http://django-extensions.readthedocs.io/en/latest/command_extensions.html,记录地址:

python manage.py runscript --help

还有一个教程。

在Django 1.9.6和Django -extensions 1.6.7上测试。

如果你想在BG中更好地磨合:

nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &

输出将在noup .out中