如何在django shell启动时运行任意代码?
这个问题:Automatically import models on Django shell launch有解释如何通过使用shell_plus开始导入模型,但没有答案关于如何运行一般的代码。如何在django shell启动时运行任意代码?
但是,有没有简单的方法来运行一个python脚本?
python manage.py shell [or shell_plus] --run=script.py
只是运行脚本,就好像在shell启动时键入整个内容一样。
我意识到你可以在shell中导入东西,但是它们被困在命名空间中。
我认为ipython应该有一种方法来运行脚本,然后将它的locals()
导入到顶级命名空间。在这种情况下,你可以做%magic script.py
,我们只需要一步,这会很好。
更改启动shell的方式应该没问题 - 主要目标是只能创建在启动shell时运行的文件。
不知道如果有,你可以使用一个标志,但如果你有IPython的安装应该是这么简单:
ipython
然后,当你在提示:
run script.py
然后:
run manage.py shell
您可以创建自己的自定义命令,就像shell_plus
已完成的操作:请参阅shell_plus
命令的source以查看方式。在该代码中,您可以指定并运行在启动shell之前需要执行的文件。 Django的文档creating custom commands也很有用。
您可以尝试使用环境变量PYTHONSTARTUP。 另请尝试django-extensions:django-extensions
请参阅django-extensions/management/commands/shell_plus.py命令。
从这个命令的源代码,我看到它尊重PYTHONSTARTUP env变量。
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代码会被加载。
问题是我可能不希望它运行所有shell - 我使用ipython除了django以外的东西!而shell_plus只加载模型。 – fastmultiplication 2012-07-17 03:17:08