2015-04-14 35 views
1

運行腳本時,必須通過-g-s。使用下面的代碼,它會向傳遞給它的參數拋出以下錯誤。Python - argparse要求或者

{~/nsnitro}-> ./sg-arg.py status -g test.server 
usage: sg-arg.py [-h] (-g SERVICEGROUP | -s SERVICENAME) {status} ... 
sg-arg.py: error: one of the arguments -g/--servicegroup -s/--servicename is required 

代碼:

parser = argparse.ArgumentParser() 
subparsers = parser.add_subparsers() 

check = subparsers.add_parser('status') 
check = parser.add_mutually_exclusive_group(required=True) 
check.add_argument('-g', '--servicegroup', action='store', help='servicegroup name', type=servicegroup_status) 
check.add_argument('-s', '--servicename', action='store', help='service name', type=servicegroup_status) 

args = parser.parse_args() 
+1

看來您要將互斥組添加到主分析器,而不是分析器。例如在這種情況下,'./sg-arg.py -g test.server status'將是正確的調用。 – mgilson

回答

1

您要添加的互斥組到錯誤的解析器。換句話說,對於您所撥打的電話,正確的呼叫將類似./sg-arg.py -g test.server status(請注意參數之前的子分析程序聲明)。

要修復它,您需要將互斥組添加到子分析器並將參數添加到該組。這似乎工作:

import argparse 
parser = argparse.ArgumentParser() 
subparsers = parser.add_subparsers() 

check = subparsers.add_parser('status') 
check_mutex = check.add_mutually_exclusive_group(required=True) 
check_mutex.add_argument('-g', '--servicegroup', action='store', help='servicegroup name') 
check_mutex.add_argument('-s', '--servicename', action='store', help='service name') 

args = parser.parse_args() 

例如,

$ python foo.py status -g test.server 
$ python foo.py status -s test.server 
$ python foo.py status test.server 
usage: foo.py status [-h] (-g SERVICEGROUP | -s SERVICENAME) 
foo.py status: error: one of the arguments -g/--servicegroup -s/--servicename is required 
+0

啊我看到了,所以刪除'type = servicegroup_status'就會破壞代碼。我實際上調用了一個名爲'servicegroup_status'的函數並傳入參數。腳本運行良好,但函數不會被調用。 – luckytaxi

+0

好的,我收回它,函數被執行,但是當我添加'type = FUNCTION_NAME' sg-arg.py status:error:其中一個參數時,它仍然會拋出錯誤-g/- servicegroup -s/- servicename是必需的 – luckytaxi