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

./manage.py shell << my_script.py

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


当前回答

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

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

输出将在noup .out中

其他回答

如果你的脚本中没有很多命令,使用它:

manage.py shell --command="import django; print(django.__version__)"

Django文档在manage.py shell上

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

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

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

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

python manage.py shell_plus

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

>>> from fol import scpt

如果你想执行启动脚本(例如,导入一些django模型来与它们交互工作),并保持在django shell中:

PYTHONSTARTUP=my_script.py python manage.py shell

我带着与OP相同的问题来到这里,而我恰恰在问题中的错误中找到了我最喜欢的答案,这在Python 3中也适用:

./manage.py shell <<EOF
import my_script
my_script.main()
EOF

我刚刚发现一个有趣的东西是Django Scripts,它允许你用python manage.py runscript foobar来编写脚本。关于实现和结构的更多详细信息可以在这里找到,http://django-extensions.readthedocs.org/en/latest/index.html