脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Django执行指定脚本的几种方法

Django执行指定脚本的几种方法

2022-09-14 13:44knktc Python

这篇文章主要给大家介绍了关于Django执行指定脚本的几种方法,文中通过实例代码介绍的非常详细,对大家学习或者使用Django具有一定的参考学习价值,需要的朋友可以参考下

前言

用Django写项目,遇到临时需要处理数据库的问题时,会考虑直接让脚本在项目环境中运行,这样就可以直接用定义好的模型和方法了。

这里提供几种方法,通过Django执行指定的脚本,让脚本直接在Django项目的环境中来运行。

Django Shell

Django自带的shell其实就加载了项目的各种环境变量,网上描述得也很多,直接这么跑就可以了:

?
1
python manage.py shell < script.py

简单是非常简单,不足的地方就是不好加参数进去,而且喜欢写main的话也不好让脚本跑起来。

自定义Command

也可以通过自定义一个简单的command来实现需要的效果,以下是最近写的一个示例,可支持执行指定的脚本文件,同时还能加入更多的脚本执行参数:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""
@author:knktc
@contact:me@knktc.com
"""
 
import os
import sys
import argparse
from django.core.management.base import BaseCommand
 
 
class Command(BaseCommand):
    help = 'Run script in current project environment'
 
    def add_arguments(self, parser):
        parser.add_argument('script', type=str, nargs=argparse.REMAINDER,
                            help='script file path and args')
 
    def handle(self, *args, **options):
        # get args
        args = options['script']
        script_path = args[0]
 
        # check file existence
        if not os.path.isfile(script_path):
            self.stderr.write(f'No such file: [{script_path}]')
            sys.exit(1)
 
        # set args
        sys_argv = [script_path] + args[1:]
        sys.argv = sys_argv
 
        # run
        with open(script_path, 'r') as f:
            exec(f.read(), {'__name__': '__main__'})

把这段代码放到任意app的management/commands目录下,命名为run_script.py即可,此后就可以一劳永逸地使用这个自定义的命令了。

此后,运行指定的脚本可参考以下的命令:

?
1
python manage.py run_script your_script arg1 arg2 -v arg3

Django extensions

此外还可以通过django-extensions这个包内置的runscript来实现,这个方法可参考文档:https://django-extensions-zh.readthedocs.io/zh_CN/latest/runscript.html

总结

到此这篇关于Django执行指定脚本的几种方法的文章就介绍到这了,更多相关Django执行指定脚本内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://knktc.com/2020/10/01/django-run-script/

延伸 · 阅读

精彩推荐