如何从Django shell执行Python脚本?
我需要从Django shell执行一个Python脚本。我试过:如何从Django shell执行Python脚本?,python,django,django-shell,Python,Django,Django Shell,我需要从Django shell执行一个Python脚本。我试过: ./manage.py shell << my_script.py /manage.py shell不建议您从shell执行此操作,因为您不应该从django环境执行随机脚本(但有一些方法可以解决此问题,请参阅其他答案) 如果这是一个将要运行多次的脚本,那么最好将其设置为ie 为此,在应用程序的管理和命令的子目录中创建一个文件,即 my_app/ __init__.py models.py
./manage.py shell << my_script.py
/manage.py shell不建议您从shell
执行此操作,因为您不应该从django环境执行随机脚本(但有一些方法可以解决此问题,请参阅其他答案)
如果这是一个将要运行多次的脚本,那么最好将其设置为ie
为此,在应用程序的管理
和命令
的子目录中创建一个文件,即
my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
并在此文件中定义自定义命令(确保文件名是要从/manage.py
执行的命令名)
注意,对于较新版本的django,此方法已被弃用!(>1.3)
另一个答案是,您可以将其添加到my_script.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
from django.core.management import setup_environ
import settings
setup_environ(settings)
然后在您拥有settings.py
的目录中使用python执行my_script.py
,但这有点太粗糙了
$ python my_script.py
您只需使用DJANGO\u SETTINGS\u模块
环境变量集运行脚本即可。这就是设置Django shell环境所需的全部内容
这在Django>=1.4中有效。我参加聚会迟到了,但我希望我的回答能帮助某人:
您可以在Python脚本中执行此操作:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
剩下的东西都放在这里了……我刚刚发现一个有趣的东西是Django脚本,它允许您编写脚本以使用python manage.py runscript foobar运行。更多关于实现和scructure的详细信息可以在这里找到,对于任何使用Django 1.7+的人来说,仅仅导入设置模块似乎是不够的
经过一番挖掘,我发现了这个堆栈溢出的答案:
您现在需要:
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位于同一文件夹中)django.setup()似乎无法工作
似乎也不需要
仅此一项就奏效了
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
如果您使用的是虚拟环境,请尝试以下操作:-
python manage.py shell
要使用这些命令,您必须在虚拟环境中。对于此用途:-
工作环境名称
例如:-
dc@dc-comp-4:~/mysite$workon jango
(詹戈)dc@dc-comp-4:~/mysite$python manage.py shell
Python 2.7.6(默认,2014年3月22日,22:59:56)
[GCC 4.8.2]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
(InteractiveConsole)
>>>
注意:-这里mysite是我的网站名,jango是我的虚拟环境名runscript
from
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
django.setup()
一个用于测试它的示例script.py
:
from django.contrib.auth.models import User
print(User.objects.values())
提及于:并记录于:
python manage.py runscript --help
在Django 1.9.6和Django extensions 1.6.7上进行了测试。@AtulVarma在“不工作”下提供了一个非常有用的注释:
如果可用(pip install ipython
),则/manage.py shell
将自动使用其shell,然后您可以使用magic命令:
正如其他答案所指出的,但没有明确说明,您实际上可能需要的不一定是从Django shell执行脚本,而是在不使用Django shell的情况下访问您的应用程序
这与Django版本有很大不同。如果您在这个线程上找不到解决方案,请在此处回答--
--或者类似的搜索可能会对您有所帮助
我必须从以下内容开始我的_command.py
import os,sys
sys.path.append('/path/to/myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file")
import django
django.setup()
import project.app.models
#do things with my models, yay
然后运行python3 my_command.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
from django.core.management import setup_environ
import settings
setup_environ(settings)
(Django 2.0.2)如果您想更好地在BG中运行:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
如果您的脚本中没有很多命令,则输出将是innohup.out
,请使用它:
manage.py shell --command="import django; print(django.__version__)"
我带着与OP相同的问题来到这里,我在问题中的错误中找到了我最喜欢的答案,这在Python 3中也适用:
/manage.py shell以其他方式执行此命令:
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
如果您希望执行启动脚本(例如,导入一些django模型以交互方式使用它们)并保留在django shell中,则这将在Python2.7和django 1.9上运行:
PYTHONSTARTUP=my_script.py python manage.py shell
django shell是在django环境中执行python模块的好方法,但是手动导入模块和执行函数并不总是容易和烦人的,尤其是在没有自动完成的情况下。为了解决这个问题,我创建了一个小的shell脚本,它允许您充分利用Linux控制台的自动完成和日志历史记录
注意:将runscript.sh复制到根项目并设置正确的执行(chmod+x)
例如:
我想在myapp/do_文件夹中的module do_somethings.py中运行名为show(a、b、c)的python函数/
标准django方式(manage.py shell):
使用脚本(runscript.sh):
脚本的参数数量不受限制。但是,只支持基元类型的参数(int、float、string)晚到参与方。但这可能对某人有所帮助
您只需要安装脚本和django扩展
只需运行django_extensions
中提供的shell_plus
,然后导入您编写的脚本
如果您的脚本是scpt.py
并且它位于文件夹fol
中,则可以按如下方式运行脚本
python manage.py shell_plus
>>> from fol import scpt
只需在shell中导入脚本,如下所示
python manage.py shell_plus
>>> from fol import scpt
我参加聚会要迟到了,但我希望我的回答能对某人有所帮助:您可以在Python脚本中这样做:
步骤1:导入
步骤2:需要执行Python脚本,只需键入:
其中test.py文件如下所示:
最后:结果将是:
其中['ISHWARDI','JHENAIDHA','HVDC CIRCL
PYTHONSTARTUP=my_script.py python manage.py shell
python3 manage.py shell
> from myapp.do_folder import do_somethings
> do_somethings.show("p1", "p2" , 3.14159)
./runscript.sh myapp/do_folder/do_somethings.py show p1 p2 3.14159
python manage.py shell_plus
>>> from fol import scpt
import mysite.asgi
python test.py
import mysite.asgi
from polls.models import GMD_TABLE
print ( [obj.gt_GMD_name for obj in GMD_TABLE.objects.all()] )
['ISHWARDI', 'JHENAIDHA', 'HVDC CIRCLE']