Argparse:嵌套的可选参数,强制--arg = val over --arg val,单次出现,可选参数顺序

时间:2018-03-27 07:33:16

标签: python command-line-arguments argparse

程序应按如下方式执行:

./interpret.py --help | --source=FILE1 [--stats=FILE2 [--vars] [--insts]]

规则是:

  1. - 如果通过了

  2. ,则必须是唯一的参数
  3. - 必须提供source = FILE1,并且不能像--source FILE1那样传递

  4. 如果提供了--vars或--insts,则必须提供--stats = FILE2

  5. - vars和--insts的顺序很重要,因此必须存储

  6. 禁止多次出现参数

  7. 我已经阅读了多个教程和SO答案,但他们甚至没有完全解决我的问题。管理以执行以下操作:

    # parses command line arguments
    def parse_args():
        parser = argparse.ArgumentParser(add_help=False)
        parser.add_argument('--source')
        parser.add_argument('--stats')
        parser.add_argument('--vars', action='count', default=0)
        parser.add_argument('--insts', action='count', default=0)
        parser.add_argument('--help', action='count', default=0)
    
        try:
            args = parser.parse_args()
        catch SystemExit:
            exit(ERR_PARAM)
    
        if args.help > 0:
            if args.source != None or args.stats != None or (args.help + args.vars + args.insts) != 1:
                exit(ERR_PARAM)
    
            manual()
            exit(0)
    
        if args.source == None:
            exit(ERR_PARAM)
    
        if args.vars > 1 or args.insts > 1:
            exit(ERR_PARAM)
    
        if (args.vars + args.insts) > 0 and args.stats == None:
            exit(ERR_PARAM)
    
        return args
    

    代码存在以下问题:

    1. - source和--stats可以多次传递

    2. - source和--stats可以像--source FILE1

    3. 一样传递
    4. --vars --insts的顺序不存储在任何地方

0 个答案:

没有答案