[英]How to execute a Python script from the Django shell?
我需要从 Django shell 执行一个 Python 脚本。我试过:
./manage.py shell << my_script.py
但它没有用。 它只是在等我写点什么。
<<
部分是错误的,使用<
代替:
$ ./manage.py shell < myscript.py
你也可以这样做:
$ ./manage.py shell
...
>>> execfile('myscript.py')
对于python3,您需要使用
>>> exec(open('myscript.py').read())
你不建议这样做,从shell
-这是为了你真不该从Django的环境中执行随机脚本(但也有解决这个办法,看到其他的答案)。
如果这是一个您将多次运行的脚本,最好将其设置为自定义命令,即
$ ./manage.py my_command
为此,请在您的app
的management
和commands
的子目录中创建一个文件,即
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+ 的人来说,似乎仅仅导入设置模块是不够的。
经过一番挖掘,我找到了这个 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 位于同一文件夹中)
我参加聚会迟到了,但我希望我的回答对某人有所帮助:您可以在 Python 脚本中执行此操作:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
你剩下的东西都放在这里......
来自django-extensions 的运行runscript
python manage.py runscript scripty.py
一个示例script.py
来测试它:
from django.contrib.auth.models import User
print(User.objects.values())
提到: http : //django-extensions.readthedocs.io/en/latest/command_extensions.html并记录在:
python manage.py runscript --help
也有教程。
在 Django 1.9.6、django-extensions 1.6.7 上测试。
您可以使用DJANGO_SETTINGS_MODULE
环境变量集运行脚本。 这就是设置 Django-shell 环境所需的全部内容。
这适用于 Django >= 1.4
@AtulVarma 在不工作的接受答案下提供了非常有用的评论:
echo 'import myscript' | python manage.py shell
正如其他答案所指出但没有明确说明的那样,您可能实际需要的不一定是从 Django shell 执行您的脚本,而是在不使用 Django shell 的情况下访问您的应用程序。
这与 Django 版本有很大不同。 如果您没有在此线程上找到您的解决方案,请在此处回答——Django 脚本无需使用 manage.py shell 访问模型对象——或类似的搜索可能对您有所帮助。
我必须以 my_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
(Django 2.0.2)
import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())
django.setup()
我参加聚会迟到了,但我希望我的回答对某人有所帮助:您可以在 Python 脚本中执行此操作:
第一步:导入
import mysite.asgi
步骤 2:需要执行 Python 脚本,只需键入:
python test.py
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']
其中['ISHWARDI', 'JHENAIDHA', 'HVDC CIRCLE']是 GMD_TABLE 的值
请注意,此方法已在较新版本的 django 中弃用! (> 1.3)
另一个答案,您可以将其添加到my_script.py
的顶部
from django.core.management import setup_environ
import settings
setup_environ(settings)
并在您拥有settings.py
的目录中使用 python 执行my_script.py
但这有点hacky。
$ python my_script.py
你可以简单地运行:
python manage.py shell < your_script.py
它应该做的工作!
如果你想在 BG 中跑得更好:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
输出将在nohup.out
我刚刚发现有趣的是 Django Scripts,它允许您编写脚本以使用 python manage.py runscript foobar 运行。 可以在此处找到有关实施和结构的更多详细信息, http: //django-extensions.readthedocs.org/en/latest/index.html
django.setup() 似乎不起作用。
似乎也不需要。
仅此一项就奏效了。
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
如果您使用的是虚拟环境,请尝试此操作:-
python manage.py shell
要使用这些命令,您必须在虚拟环境中。 用于此用途:-
处理 vir_env_name
例如 :-
dc@dc-comp-4:~/mysite$ workon jango
(jango)dc@dc-comp-4:~/mysite$ python manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
注意:-这里 mysite 是我的网站名称,jango 是我的虚拟环境名称
带着与 OP 相同的问题来到这里,我在问题中的错误中找到了我最喜欢的答案,这也适用于 Python 3:
./manage.py shell <<EOF
import my_script
my_script.main()
EOF
另一种方式是执行这个:
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
这适用于 Python2.7 和 Django1.9
如果您想执行启动脚本(例如,导入一些 django 模型以交互方式使用它们)并保留在 django shell 中:
PYTHONSTARTUP=my_script.py python manage.py shell
django shell 是在 django 环境下执行 python 模块的好方法,但手动导入模块和执行函数并不总是容易和烦人,尤其是在没有自动完成的情况下。 为了解决这个问题,我创建了一个小的 shell 脚本“runscript.sh” ,它允许您充分利用 Linux 控制台的自动完成和日志历史记录。
注意:将runscript.sh复制到根项目并设置执行权限(chmod +x)
例如:我想在 myapp/do_folder/ 中的模块 do_somethings.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)
聚会迟到了。 但这可能对某人有帮助。
您只需要安装脚本和django-extensions
。
只需运行shell_plus
可用的django_extensions
并导入您编写的脚本。
如果你的脚本是scpt.py
,这是一个文件夹内fol
您可以按以下方式运行的脚本。
python manage.py shell_plus
并按如下方式在 shell 中导入您的脚本。
>>> from fol import scpt
首先检查你的文件。
py manage.py
如果显示您的文件
[contracts]
category_load
现在您可以通过键入 powershell(terminal) 来运行您的 .py 文件
py manage.py category_load
其实很简单,打开 django shell 和python manage.py shell
然后简单地写import test
导入测试.py
# test.py
def x():
print('hello');
现在您可以执行此文件中的命令
test.x() // will print hello
在导入语句之后放置globals().update(locals())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.