django shell启动时如何运行任意代码?

时间:2012-07-16 07:01:05

标签: python django debugging django-shell

这个问题: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 个答案:

答案 0 :(得分:2)

您可以像shell_plus一样创建自己的自定义命令:请参阅shell_plus命令的source以了解具体方法。在该代码中,您可以在启动shell之前指定并运行需要执行的文件。 Django关于creating custom commands的文档也很有用。

答案 1 :(得分:2)

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

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

从这个命令的源代码我看到它尊重PYTHONSTARTUP env变量。

答案 2 :(得分: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代码。

答案 3 :(得分:1)

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

ipython

然后当你出现提示时:

run script.py

然后:

run manage.py shell