我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
当前回答
不建议你在shell中这样做——这是因为你不应该在django环境中执行随机脚本(但是有一些方法可以解决这个问题,参见其他答案)。
如果这是一个脚本,你将运行多次,这是一个好主意设置为一个自定义命令,即
$ ./manage.py my_command
要做到这一点,在你的应用程序的管理和命令的子目录中创建一个文件
my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
并在该文件中定义您的自定义命令(确保文件的名称是您想要从。/manage.py执行的命令的名称)
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, **options):
# now do the things that you want with your models here
其他回答
Django.setup()似乎不能正常工作。
似乎也不是必须的。
仅这一点就奏效了。
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
我刚刚发现一个有趣的东西是Django Scripts,它允许你用python manage.py runscript foobar来编写脚本。关于实现和结构的更多详细信息可以在这里找到,http://django-extensions.readthedocs.org/en/latest/index.html
django shell是在django环境中执行python模块的好方法,但是手动导入模块和执行函数并不总是那么容易和烦人,尤其是在没有自动补全的情况下。为了解决这个问题,我创建了一个小型shell脚本“runscript.sh”,它允许您充分利用Linux控制台的自动完成功能和日志历史记录。
注意:拷贝runscript.sh到根项目并设置执行权限(chmod +x)
例如: 我想在myapp/do_folder/ do_things .py模块中运行名为show(a, b, c)的python函数
标准的django方式(manage.py shell):
python3 manage.py shell
> from myapp.do_folder import do_somethings
> do_somethings.show("p1", "p2" , 3.14159)
使用脚本(runscript.sh):
./runscript.sh myapp/do_folder/do_somethings.py show p1 p2 3.14159
脚本的参数数量不受限制。但是只支持基本类型的参数(int, float, string)
如果IPython可用(pip install IPython),那么./manage.py shell将自动使用它的shell,然后你可以使用神奇的命令%run:
%run my_script.py
不建议你在shell中这样做——这是因为你不应该在django环境中执行随机脚本(但是有一些方法可以解决这个问题,参见其他答案)。
如果这是一个脚本,你将运行多次,这是一个好主意设置为一个自定义命令,即
$ ./manage.py my_command
要做到这一点,在你的应用程序的管理和命令的子目录中创建一个文件
my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
并在该文件中定义您的自定义命令(确保文件的名称是您想要从。/manage.py执行的命令的名称)
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, **options):
# now do the things that you want with your models here