我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
当前回答
另一种方式是执行这个
echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base
它在Python2.7和Django1.9上运行
其他回答
将globals().update(locals())放在import语句之后
注意,这个方法在django的最新版本中已经被弃用了!(> 1.3)
另一个答案是,您可以将它添加到my_script.py的顶部
from django.core.management import setup_environ
import settings
setup_environ(settings)
然后用python在settings。py目录下执行my_script.py,但这有点棘手。
$ python my_script.py
如果你的脚本中没有很多命令,使用它:
manage.py shell --command="import django; print(django.__version__)"
Django文档在manage.py shell上
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)
<<部分是错误的,用<代替:
$ ./manage.py shell < myscript.py
你还可以:
$ ./manage.py shell
...
>>> execfile('myscript.py')
对于python3,您需要使用
>>> exec(open('myscript.py').read())