在 `python manage.py shell` 启动后执行脚本
Execute script after `python manage.py shell` is up
有调用Django shell的命令:
python manage.py shell
我想创建一个 BASH 别名,它将:
- 开始
python manage.py shell
- 执行
print 'foo'
类似于 -i 选项的内容:python -i /usr/bin/print_foo.py
但带有 manage.py shell
这样做的原因是太加快了调试过程。因此,我不想导入所有相关模型并分配变量,而是想在单独的 PY 文件中进行。所以每次我开始manage.py shell
,我都会把所有的工具都放在手边。
编辑:使用python manage.py shell < /usr/bin/print_foo.py
几乎可以解决问题。但是终端会关闭..如果有办法让它保持打开状态。
不是直接的答案,而是 Django Extensions(Github, Docs) shell_plus
可能对此很有趣。(这个包有很多有用的工具,所以在很多情况下它是一个有价值的依赖项。)
应用的模型是自动导入的。要配置更多导入,请参阅 additional imports 部分。
如果你想使用 shell_plus
自动执行来自任意 python 个模块的代码,你可以使用 SHELL_PLUS_PRE_IMPORTS
和 SHELL_PLUS_POST_IMPORTS
设置。在 Django 的应用程序模型自动导入之前或 b) 之后配置的任何 python 模块 运行 a) 之后。
我也遇到过这个问题,< test.py
关闭了 shell,并且 shell_plus
除了模型的自动加载之外没有添加太多,没有加载代码你想调试
但是我可以这样做:我制作了一个 test.py
如果它不是来自 Django 环境的 运行,它会初始化 Django,并且 运行 它与 python -i test.py
基本思想是不使用 manage.py shell
if __name__ == '__main__':
# This will run e.g. from python -i test.py, but will be skipped if from Django
import django # 1.7
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
# Your regular Django stuff here
# Init your vars etc and prepare values to debug
# The Python prompt will remain active here so you can work on it
另一个自动化程度较低的解决方案是调用 execfile('test.py')
或 %run test.py
如果您在 IPython,
优点是您可以在不离开 shell 的情况下重新加载 test.py
模块(更快并保留上下文),缺点是您必须在 shell 打开时手动加载它
您可以使用以下简单的 shell 脚本:
#!/bin/bash
export PYTHONSTARTUP="" # Set the startup script python will run when it start.
shift # Remove the first argument, don't want to pass that.
python manage.py shell "$@" # Run manage.py with the startup script.
只需首先提供您想要 运行 的 python 脚本作为脚本的第一个参数。所有其他参数直接传递给 manage.py
。对 $PYTHONSTARTUP
的更改不会影响 shell 中的环境。
有调用Django shell的命令:
python manage.py shell
我想创建一个 BASH 别名,它将:
- 开始
python manage.py shell
- 执行
print 'foo'
类似于 -i 选项的内容:python -i /usr/bin/print_foo.py
但带有 manage.py shell
这样做的原因是太加快了调试过程。因此,我不想导入所有相关模型并分配变量,而是想在单独的 PY 文件中进行。所以每次我开始manage.py shell
,我都会把所有的工具都放在手边。
编辑:使用python manage.py shell < /usr/bin/print_foo.py
几乎可以解决问题。但是终端会关闭..如果有办法让它保持打开状态。
不是直接的答案,而是 Django Extensions(Github, Docs) shell_plus
可能对此很有趣。(这个包有很多有用的工具,所以在很多情况下它是一个有价值的依赖项。)
应用的模型是自动导入的。要配置更多导入,请参阅 additional imports 部分。
如果你想使用 shell_plus
自动执行来自任意 python 个模块的代码,你可以使用 SHELL_PLUS_PRE_IMPORTS
和 SHELL_PLUS_POST_IMPORTS
设置。在 Django 的应用程序模型自动导入之前或 b) 之后配置的任何 python 模块 运行 a) 之后。
我也遇到过这个问题,< test.py
关闭了 shell,并且 shell_plus
除了模型的自动加载之外没有添加太多,没有加载代码你想调试
但是我可以这样做:我制作了一个 test.py
如果它不是来自 Django 环境的 运行,它会初始化 Django,并且 运行 它与 python -i test.py
基本思想是不使用 manage.py shell
if __name__ == '__main__':
# This will run e.g. from python -i test.py, but will be skipped if from Django
import django # 1.7
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
# Your regular Django stuff here
# Init your vars etc and prepare values to debug
# The Python prompt will remain active here so you can work on it
另一个自动化程度较低的解决方案是调用 execfile('test.py')
或 %run test.py
如果您在 IPython,
优点是您可以在不离开 shell 的情况下重新加载 test.py
模块(更快并保留上下文),缺点是您必须在 shell 打开时手动加载它
您可以使用以下简单的 shell 脚本:
#!/bin/bash
export PYTHONSTARTUP="" # Set the startup script python will run when it start.
shift # Remove the first argument, don't want to pass that.
python manage.py shell "$@" # Run manage.py with the startup script.
只需首先提供您想要 运行 的 python 脚本作为脚本的第一个参数。所有其他参数直接传递给 manage.py
。对 $PYTHONSTARTUP
的更改不会影响 shell 中的环境。