Python django shell启动时如何运行任意代码?
这个问题:有解释如何在开始时使用shell_plus导入模型的答案,但没有关于如何运行一般代码的答案 但是有没有一种简单的方法来运行python脚本呢Python django shell启动时如何运行任意代码?,python,django,debugging,django-shell,Python,Django,Debugging,Django Shell,这个问题:有解释如何在开始时使用shell_plus导入模型的答案,但没有关于如何运行一般代码的答案 但是有没有一种简单的方法来运行python脚本呢 python manage.py shell [or shell_plus] --run=script.py 将只运行脚本,就像在shell启动时键入整个内容一样 我意识到可以在shell中导入东西,但是它们被困在一个名称空间中 我认为ipython应该有办法运行脚本,然后将其locals()导入顶级命名空间。在这种情况下,您只需执行%magi
python manage.py shell [or shell_plus] --run=script.py
将只运行脚本,就像在shell启动时键入整个内容一样
我意识到可以在shell中导入东西,但是它们被困在一个名称空间中
我认为ipython应该有办法运行脚本,然后将其locals()
导入顶级命名空间。在这种情况下,您只需执行%magic script.py
,我们只需执行一个步骤,这很好
更改启动shell的方式应该没问题-主要目标是能够创建一个在启动shell时运行的文件。不确定是否有可以使用的标志,但如果安装了ipython,它应该非常简单:
ipython
然后,当出现提示时:
运行script.py
然后:
运行manage.py shell
您可以创建自己的自定义命令,就像shell\u plus
所做的那样:请参阅shell\u plus
命令的说明,了解如何创建自定义命令。在该代码中,您可以指定并运行启动shell之前需要执行的文件。Django关于的文档也很有用。您可以尝试使用环境变量PYTHONSTARTUP。
还可以尝试django扩展:
请参阅django extensions/management/commands/shell_plus.py命令
从这个命令的源代码中,我看到它尊重PYTHONSTARTUP env变量。shell\u plus使用了一种有限形式的IPython,它不处理它的启动和配置,这会阻止大多数在django+IPython shell启动时运行东西的正常尝试。您可以将其切换为使用完整版本,这将解决大多数问题 修改django_扩展/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仅加载模型。