2016-11-25 48 views
0

我需要的是當我的腳本使用--history開關執行時,從常規選項中允許的唯一選項僅限於-g或-c,而不是-s或其他任何選項。如何使用argparse來限制選項

所以script.py - 歷史-g GRP1是允許的,script.py - 歷史-c cluster1中是允許的,但是script.py - 歷史-s SYS1是不允許的。 另外script.py - 歷史 - 迄今爲止被允許,所以是script.py --history --by-date -g grp1script.py --history --by-date -c cluster1這怎麼能被ArgumentParser限制。

arg_parser = ArgumentParser(description='Description') 
    main_options = arg_parser.add_mutually_exclusive_group(required=True) 
    main_options.add_argument('--history', action='store_true', 
           help='Display event history.') 

history_flags = arg_parser.add_argument_group(
     'History Options', 
     description='bla' 
     history_flags.add_argument('--by-date', action='store_true', 
          help='Sort history by date, not group.') 

flags = arg_parser.add_argument_group('General Options') 
flags.add_argument('-g', dest='group', 
        help='help') 
flags.add_argument('-c', dest='cluster', 
        help='help') 
flags.add_argument('-s', dest='system', 
        help='help') 

回答

0

你能解決你的問題如下:

args = arg_parser.parse_args() 

if args.group and args.cluster and args.system: 

    args.error('Set -g -c -s is not allowed!') 
+0

這將正常工作,如果常規選項只有這三個項目,但也有更多的選擇,這使得如果條件很長。如果新的通用選項被引入,代碼需要在兩個地方更新。如果有的話,我希望在ArgumentParser中有一個解決方案。 – werner

相關問題