8

这个问题:Automatically import models on Django shell launch有解释如何在启动时使用 shell_plus 导入模型的答案,但没有关于如何运行代码的一般答案。

但是有没有一种简单的方法来运行一个 python 脚本?

python manage.py shell [or shell_plus] --run=script.py

只需运行脚本,就好像您在 shell 启动时输入了整个内容一样。

我意识到你可以在 shell 中导入东西,但是它们被困在一个命名空间中。

我认为 ipython 应该有一种方法来运行脚本,然后将其locals()导入顶级命名空间。在那种情况下,你可以做%magic script.py,我们只需要一步,这很好。

更改启动 shell 的方式应该没问题 - 主要目标是能够创建一个在启动 shell 时运行的文件。

4

4 回答 4

4

您可以像以前一样创建自己的自定义命令shell_plus:查看命令的源代码shell_plus了解如何操作。在该代码中,您可以指定并运行需要在启动 shell 之前执行的文件。Django 关于创建自定义命令的文档也很有用。

于 2012-07-16T08:18:28.160 回答
2

您可以尝试使用环境变量 PYTHONSTARTUP。还可以尝试 django-extensions:django-extensions

请参阅 django-extensions/management/commands/shell_plus.py 命令。

从这个命令的源代码中,我看到它尊重 PYTHONSTARTUP 环境变量。

于 2012-07-16T09:16:19.457 回答
2

shell_plus 使用有限形式的 IPython,它不处理其启动和配置,这会破坏大多数在 django+ipython shell 启动时运行东西的正常尝试。您可以将其切换为使用完整版,这将解决大多数问题。

修改django_extensions/management/commands/shell_plus.py

消除:

embed(user_ns=imported_objects)

并将其替换为:

from IPython import start_ipython
start_ipython(argv=[], user_ns=imported_objects)

然后将加载启动目录中的 python 代码。

于 2014-03-26T09:16:48.263 回答
1

不确定是否有可以使用的标志,但如果你安装了 ipython,它应该很简单:

ipython

然后,当您在提示中时:

run script.py

然后:

run manage.py shell

于 2012-07-16T07:05:16.880 回答