2014-01-22 47 views
1

我正在使用Python的2.7 argparse。我需要它到用戶可以輸入論述(-a和-b)或(-c)的地方。但是並不是(-a和-b)和(-c)在一起。如果(-a和-b)由用戶選擇而不是-c,則它們都是必需的。我怎麼能這樣做?Python Argparse add_mutually_exclusive_group() - 需要ether 2 args或者只有1個參數

group_key = member_add.add_mutually_exclusive_group(required=True) 
group_key.add_argument('-a', 
         required=True) 

group_key.add_argument('-b', 
         required=True) 

group_key.add_argument('-c', 
         required=True) 

回答

1

當前實現add_mutually_exclusive_group的()實際上並不 創建互斥組。有一個open bug來解決這個問題。

說了這麼多,你可以使用實現這一目標:

(一)subcommands

示例代碼:

# create the top-level parser 
parser = argparse.ArgumentParser() 
subparsers = parser.add_subparsers(help='help for subcommand') 

# create the parser for the "cmd_1" command 
parser_a = subparsers.add_parser('cmd_1', help='help for cmd_1') 
parser_a.add_argument('-a', type=str, help='help for a') 
parser_a.add_argument('-b', type=str, help='help for b') 

# create the parser for the "cmd_2" command 
parser_b = subparsers.add_parser('cmd_2', help='help for cmd_2') 
parser_b.add_argument('-c', type=str, help='help for c') 
parser.parse_args() 

(二)小黑客的簡單情況像您一樣的:

ap=argparse.ArgumentParser() 

# 1st group 
ap.add_argument("-a", dest="value_a", help="help for a", required=False) 
ap.add_argument("-b", dest="value_b", help="help for b", required=False) 

# 2nd group 
ap.add_argument("-c", dest="value_c", help="help for b", required=False) 
args = ap.parse_args() 

if (args.value_a or args.value_b): 
if (args.value_a or args.value_b) and args.value_c: 
    print "-a and -b|-c are mutually exclusive ..." 
elif not (args.value_a and args.value_b): 
    print "both -a and -b are required." 
相關問題