我需要从Django shell执行Python脚本。我试过了:
./manage.py shell << my_script.py
但它没有用。它只是在等我写点什么。
答案 0 :(得分:315)
<<
部分错误,请改用<
:
$ ./manage.py shell < myscript.py
你也可以这样做:
$ ./manage.py shell
...
>>> execfile('myscript.py')
对于python3,您需要使用
>>> exec(open('myscript.py').read())
答案 1 :(得分:189)
不建议您从shell
执行此操作 - 这是因为您不应该真正从django环境执行随机脚本(但是方式这,见其他答案)。
如果这是一个你将多次运行的脚本,最好将其设置为custom command即
$ ./manage.py my_command
这样做会在management
的{{1}}和commands
的子目录中创建一个文件,即
app
并在此文件中定义您的自定义命令(确保文件名是您要从my_app/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
my_command.py
tests.py
views.py
执行的命令的名称)
./manage.py
答案 2 :(得分:89)
对于任何使用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位于同一文件夹中)
答案 3 :(得分:66)
我参加晚会但是我希望我的回复会帮助某人: 您可以在Python脚本中执行此操作:
import sys, os
sys.path.append('/path/to/your/django/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.conf import settings
你剩下的东西都来了......
答案 4 :(得分:22)
要测试它的示例 在http://django-extensions.readthedocs.io/en/latest/command_extensions.html提到并记录在: 在Django 1.9.6上测试,django-extensions 1.6.7。runscript
python manage.py runscript scripty.py
script.py
:from django.contrib.auth.models import User
print(User.objects.values())
python manage.py runscript --help
答案 5 :(得分:9)
答案 6 :(得分:8)
您可以使用DJANGO_SETTINGS_MODULE
环境变量集运行脚本。这就是设置Django-shell环境所需的一切。
这适用于Django&gt; = 1.4
答案 7 :(得分:4)
正如其他答案所示,但没有明确说明,您可能实际需要的不一定是从Django shell执行您的脚本,而是在不使用Django shell 的情况下访问您的应用。 / p>
这有很多Django版本与Django版本不同。如果您在此主题中找不到解决方案,请在此处回答 -
Django script to access model objects without using manage.py shell
- 或类似的搜索可以帮助你。 我必须用 然后运行 (Django 2.0.2)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
答案 8 :(得分:3)
@AtulVarma在无法工作的accepted answer:
下提供了非常有用的评论echo 'import myscript' | python manage.py shell
答案 9 :(得分:3)
答案 10 :(得分:2)
注意,此方法已被弃用于更新版本的django!(&gt; 1.3)
另一个答案是,您可以将其添加到my_script.py
from django.core.management import setup_environ
import settings
setup_environ(settings)
并在您拥有my_script.py
的目录中使用python执行settings.py
,但这有点笨拙。
$ python my_script.py
答案 11 :(得分:1)
如果您使用虚拟环境,请尝试此操作: -
python manage.py shell
使用这些命令你必须在虚拟环境中。用于此用途: -
workon 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是我的虚拟环境名称
答案 12 :(得分:1)
如果你想更好地在BG中跑步:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
输出将在nohup.out
答案 13 :(得分:1)
我参加聚会迟到了,但我希望我的回答对某人有所帮助:您可以在 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 的值
答案 14 :(得分:0)
我刚刚发现有趣的是Django Scripts,它允许你编写脚本来运行python manage.py runscript foobar。有关实施和结构的更多详细信息,请参见http://django-extensions.readthedocs.org/en/latest/index.html
答案 15 :(得分:0)
在这里遇到了与OP相同的问题,我发现我最喜欢的答案恰好是该问题中的错误,这在Python 3中也适用:
./manage.py shell <<EOF
import my_script
my_script.main()
EOF
答案 16 :(得分:0)
以其他方式执行此操作:
def recordToType[T, F, A[_, _] <: TBase[T, F]](record: ConsumerRecord[String, Array[Byte]])(
implicit m: scala.reflect.ClassTag[A[_,_]]
): A[T,F] = {
val a:A[T,F] = m.runtimeClass.getConstructors.head.newInstance().asInstanceOf[A[T, F]]
...
这适用于Python2.7和Django1.9
答案 17 :(得分:0)
如果您要执行启动脚本(例如,导入一些django模型以交互方式使用它们)并保留在django shell中:
PYTHONSTARTUP=my_script.py python manage.py shell
答案 18 :(得分:0)
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)
答案 19 :(得分:0)
晚聚会。但这可能对某人有用。
您所需要做的就是您的脚本并安装django-extensions
。
只需运行shell_plus
中可用的django_extensions
,然后导入您编写的脚本即可。
如果脚本为scpt.py
并且位于文件夹fol
内,则可以按以下方式运行脚本。
python manage.py shell_plus
,只需按照以下步骤将脚本导入外壳程序即可。
>>> from fol import scpt
答案 20 :(得分:-1)
django.setup()似乎不起作用。
似乎也不需要。
这一点有效。
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")