• python脚本传参main.py设计


     加功能,在opt_info里定义功能信息,p_check加检查,p_set设置参数。

    执行效果:

    代码:

    import sys
    import json
    import os
    # from core.e2j import E2J
    # from core.merge import Merge
    # from core.e2j_check import E2JCheck
    
    help_info = """
    --------------------------航空工具------------------------------
    
      python main.py e2j                # excel转json,默认配置执行
      python main.py e2j -v hainan-0.1  # excel转json,指定版本信息
      python main.py e2j -v test_1103 -multilingual  # excel转json,指定版本信息,语种版本标志
      python main.py e2j -v test_1103 -multilingual -check  # excel转json,指定版本信息,语种版本标志,简单校验
    
      # 指定版本为1.2,不要默认配置文件夹的配置,不要默认配置,所有https转http
      python main.py e2j -v 1.2 -no_default_config_files -no_default_config -https_to_http
    
      # 合并json文件,放在json_merge文件夹下的json文件会被遍历合并,生成到dist目录下
      python main.py merge -v test-merge
      
    ----------------------------------------------------------------
    """
    
    E2J_CONFIG_FILENAME = "e2j_config.json"
    MERGE_CONFIG_FILENAME = "merge_config.json"
    E2J_CHECK_CONFIG_FILENAME = "e2j_check_config.json"
    
    E2J_check_run = False
    
    # 测试
    class E2J:
      
      def __init__(self,config):
        self.config = config
    
      def run(self):
        print("E2j run")
        print("E2J config: ", self.config)
    
    class Merge:
    
      def __init__(self,config):
        self.config = config
    
      def run(self):
        print("Merge run")
        print("Merge config: ", self.config)
    
    class E2JCheck:
    
      def __init__(self,config):
        self.config = config
    
      def run(self):
        print("E2JCheck run")
        print("E2JCheck config: ", self.config)
    
    opt_info = {
      "e2j": {
        # 执行哪个功能
        "func": E2J,
        # 配置路径
        "config_file_name": E2J_CONFIG_FILENAME,
        # 传递哪些配置
        "config": None,
        # key参数,value是字典(num几个参数)
        "-v": {
          # -v 后有几个参数
          "num": 1,
        },
        "-no_default_config_files": {
          "num": 0
        },
        "-no_default_config": {
          "num": 0
        },
        "-https_to_http": {
          "num": 0
        },
        "-multilingual": {
          "num": 0
        },
        "-check": {
          "num": 0
        }
      },
      "merge": {
        # 执行哪个功能
        "func": Merge,
        # 配置路径
        "config_file_name": MERGE_CONFIG_FILENAME,
        # 传递哪些配置
        "config": None,
        # 参数
        "-v": {
          "num": 1,
        },
      },
      "e2j_check": {
        # 执行哪个功能
        "func": E2JCheck,
        # 配置路径
        "config_file_name": E2J_CHECK_CONFIG_FILENAME,
        # 传递哪些配置
        "config": None,
        # 参数
        "-json_file_name": {
          "num": 1,
        },
        "-v": {
          "num": 1,
        },
      }
    }
    
    
    def p_check(opt, p, p_v):
      flag = True
      # -v 目前没什么可检查的
    
      return flag
    
    
    def p_set(opt, config, p, p_v=None):
      if opt in ['e2j', 'merge'] and p == "-v":
        config["version"] = p_v
      elif opt == 'e2j' and p == "-no_default_config_files":
        config["default_config_files"] = []
      elif opt == 'e2j' and p == "-no_default_config":
        config["default_config"] = {}
      elif opt == 'e2j' and p == "-https_to_http":
        config["https_to_http"] = True
      elif opt == 'e2j' and p == "-multilingual":
        config["multilingual"] = True
      elif opt == 'e2j' and p == '-check':
        global E2J_check_run
        E2J_check_run = True
        config["e2j_check"] = True
      elif opt == 'e2j_check' and p == "-json_file_name":
        config["json_file_name"] = p_v
      elif opt == 'e2j_check' and p == "-v":
        config["json_file_name"] = '%s_cfg.json' % p_v
    
    def run(script_params=[]):
      if len(script_params) < 1:
        script_params = sys.argv
      # print(script_params) # ['main.py', 'e2j', '-v', '0.2', '-c', '1']
    
      # 帮助信息
      if len(script_params) < 2:
        print(help_info)
        return
    
      # 执行参数
      opt = script_params[1]
      # 判断是否存在
      if not opt_info.get(opt, False):
        print("%s功能不存在!请检查传参!" % (opt))
        return
    
      # 加载配置
      # project_path = os.getcwd()
      # config_path = os.path.join(project_path, "conf", opt_info[opt]["config_file_name"])
      # if not os.path.exists(config_path):
      #   print("%s 配置文件不存在!" % (config_path))
      #   return
      # opt_info[opt]["config"] = json.load(open(config_path, encoding="utf-8"))
    
      # 加载配置测试
      opt_info[opt]["config"] = {}
    
      # 遍历除main.py,功能的参数
      for i in range(2, len(script_params)):
        p = script_params[i]
        if not p.startswith('-'):
          continue
        # 判断是否在参数字典中
        if not opt_info[opt].get(p, False):
          print("%s 功能没有 %s 参数!" % (opt, p))
          continue
        # 参数值获取
        p_num = opt_info[opt][p]["num"]
        if p_num < 1:
          # 参数对应设置
          p_set(opt, opt_info[opt]["config"], p)
        # 参数值为1个的
        elif p_num == 1:
          p_v = script_params[i+p_num]
          # 检查参数
          if not p_check(opt, p, p_v): continue
          # 参数对应设置
          p_set(opt, opt_info[opt]["config"], p, p_v)
    
      # # 执行
      # func = opt_info[opt]["func"]
      # if opt in ['e2j', 'merge']:
      #   func(opt_info[opt]["config"]).run()
      # elif opt == 'e2j_check':
      #   e2j_config_path = os.path.join(project_path, "conf", E2J_CONFIG_FILENAME)
      #   e2j_config = json.load(open(e2j_config_path, encoding="utf-8"))
      #   func(e2j_config, opt_info[opt]["config"]).run()
    
      # # 调用检查功能
      # if opt == 'e2j' and E2J_check_run:
      #   # 重新调用
      #   run(['main.py', 'e2j_check', '-v', opt_info[opt]['config']['version']])
    
      # 执行测试
      func = opt_info[opt]["func"]
      func(opt_info[opt]["config"]).run()
    
    if __name__ == '__main__':
      run()
  • 相关阅读:
    C++标准库之泛型算法
    auto 和 decltype (C++11 新增)
    C++ primer学习记录(个人猜想未测试版本)
    linux学习笔记之文件类型,及目录介绍
    crontab指令详解
    linux学习笔记之硬盘分区
    内存知识整理。
    JSON格式
    DuiLib(四)——控件绘制
    DuiLib(三)——控件消息
  • 原文地址:https://www.cnblogs.com/zezhou/p/15627761.html
Copyright © 2020-2023  润新知