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

./manage.py shell << my_script.py

但这并没有起作用。它只是在等我写点什么。


当前回答

我刚刚发现一个有趣的东西是Django Scripts,它允许你用python manage.py runscript foobar来编写脚本。关于实现和结构的更多详细信息可以在这里找到,http://django-extensions.readthedocs.org/en/latest/index.html

其他回答

django shell是在django环境中执行python模块的好方法,但是手动导入模块和执行函数并不总是那么容易和烦人,尤其是在没有自动补全的情况下。为了解决这个问题,我创建了一个小型shell脚本“runscript.sh”,它允许您充分利用Linux控制台的自动完成功能和日志历史记录。

注意:拷贝runscript.sh到根项目并设置执行权限(chmod +x)

例如: 我想在myapp/do_folder/ do_things .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)

如果你正在使用虚拟环境,试试这个:-

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是我的虚拟环境名称

Django.setup()似乎不能正常工作。

似乎也不是必须的。

仅这一点就奏效了。

import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")

如果你想在BG中更好地磨合:

nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &

输出将在noup .out中

你可以简单地运行:

Python manage.py shell < your_script.py

它应该做到这一点!