添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
喝醉的拖把  ·  Python - ...·  1 年前    · 
痴情的扁豆  ·  关于 kotlin 的 forEach ...·  3 年前    · 
小眼睛的牙膏  ·  Laravel-admin ...·  3 年前    · 
多情的匕首  ·  Java 开发工具包 ...·  3 年前    · 
"""因随业务发展,支持前端向本目录下上传新的校验项文件,实现动态加载""" dir_path = os.path.dirname(os.path.abspath(__file__)) # 将当前目录加入到python解释器执行目录中,让其能够找到本文件并加载本文件加载的模块,防止因相对导入而报错 sys.path.append(dir_path) # print(sys.path) __all__ = ["check_module_path_list"] check_module_path_list = [] def os_discover_dir(): """不支持子目录导入,只能在当前根目录下导入""" global check_module_path_list for root, dirs, files in os.walk(dir_path, topdown=False): for _file_name in files: # 排除__pycache__目录及*.pyc文件以及__init__.py文件 if not _file_name.startswith("__init") and not _file_name.endswith(".pyc"): module_name, ext = os.path.splitext(os.path.basename(_file_name)) module = importlib.import_module(module_name) check_module_path_list.append(module) os_discover_dir()
  • 重载文件main_discover.py
  • #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # author:Sun
    # datetime:2022/8/2 0002
    热重载模块的使用
    python版本: Python 2.7, >=3.5
    pip install AoikLiveReload
    import datetime
    from pprint import pprint
    from check_components import check_module_path_list
    from aoiklivereload.aoiklivereload import LiveReloader
    dic = dict()
    # 自动加载新的校验项
    print("自动加载的模块列表为:", check_module_path_list)
    for i in check_module_path_list:
        for fun in dir(i):
            if not str(fun).startswith('__'):
                # 构建校验字典{校验项英文名:{校验项模块对象:object,校验项方法名:"func_name",校验项前端说明:""}}
                dic.update({
                    f"{i.__name__}_{fun}".upper(): {
                        "module_name": i,
                        "fun_name": fun,
                        "title": getattr(i, fun).__doc__.split()[0] if getattr(i, fun).__doc__ else "此title最好是实现在函数定义时就确定便于前端拿到显示为选项",
                # print(fun, type(fun))
                # ret = getattr(i, fun)(888)
                # print(ret)
    pprint(dic)
    # 调用某个校验项
    ret = getattr(dic["COM_CHINA_CHECK_A"]["module_name"], dic["COM_CHINA_CHECK_A"]["fun_name"])(888888)
    print(datetime.datetime.now(), ret)
    # Create reloader
    reloader = LiveReloader()
    # Start watcher thread
    reloader.start_watcher_thread()
    # TODO: 功能实现注意点
    # 1. 只能在指定的目录下创建文件,且文件名不允许与之前的一样,可以前端做效验也可以生成唯一id拼接实现
    # 2. 本脚本可以当一个任务一直在执行,可以将对应的字典写入缓存