Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Django shell执行Python脚本?_Python_Django_Django Shell - Fatal编程技术网

如何从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

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

./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 &

如果您的脚本中没有很多命令,则输出将是in
nohup.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']