我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
当前回答
我带着与OP相同的问题来到这里,而我恰恰在问题中的错误中找到了我最喜欢的答案,这在Python 3中也适用:
./manage.py shell <<EOF
import my_script
my_script.main()
EOF
其他回答
你可以使用DJANGO_SETTINGS_MODULE环境变量来运行脚本。这就是设置Django-shell环境所需的全部内容。
这在Django >= 1.4中是有效的
其实很简单,只要你打开django shell Python manage.py shell然后简单的写import test来导入test.py
# test.py
def x():
print('hello');
现在您可以执行该文件中的命令
test.x() // will print hello
对于使用Django 1.7+的人来说,仅仅导入设置模块似乎是不够的。
经过一番挖掘,我找到了这个Stack Overflow的答案: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在同一个文件夹中)
首先检查你的文件。
py manage.py
如果显示您的文件
[contracts]
category_load
现在您可以通过输入powershell(terminal)来运行.py文件
py manage.py category_load
不建议你在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