如何在Django shell中执行Python脚本?

2024-04-26 12:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从Django shell执行一个Python脚本。我试过:

./manage.py shell << my_script.py

但没用。只是在等我写点什么。


Tags: djangopy脚本managemyscriptshell
3条回答

<<部分错误,请改用<

$ ./manage.py shell < myscript.py

你也可以:

$ ./manage.py shell
...
>>> execfile('myscript.py')

对于Python3你需要使用

>>> exec(open('myscript.py').read())

不建议您在shell中这样做,这是因为您不应该真正地从django环境中执行随机脚本(但这里有方法,请参阅其他答案)。

如果这是一个将运行多次的脚本,那么最好将其设置为custom commandie

 $ ./manage.py my_command

为此,在managementcommands的子目录中创建一个文件,即

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 1.7+的人来说,仅仅导入settings模块似乎是不够的。

经过一番挖掘,我找到了这个堆栈溢出的答案:https://stackoverflow.com/a/23241093

你现在需要:

import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
# now your code can go here...

没有执行上述操作,我就得到了一个django.core.exceptions.AppRegistryNoReady错误。

我的脚本文件与我的django项目位于同一目录中(即与manage.py位于同一文件夹中)

相关问题 更多 >