Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django shell启动时如何运行任意代码?_Python_Django_Debugging_Django Shell - Fatal编程技术网

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

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

这个问题:有解释如何在开始时使用shell_plus导入模型的答案,但没有关于如何运行一般代码的答案

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

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仅加载模型。