的add_argument
方法需要type
關鍵字參數。任何可調用對象都可以作爲參數傳遞給這個參數。
這是一個可以傳遞給add_argument
方法的類,它可以滿足您的要求。
import argparse
class Arg(object):
def __init__(self, value):
self.value = value
if '=' in value:
self.value = value.split('=', 1)
def __str__(self):
return '{}=<{}>'.format(self.value[0], self.value[1]) if isinstance(self.value, list) else self.value
def __repr__(self):
if isinstance(self.value, list):
return repr('{}=<value>'.format(self.value[0]))
return '{}'.format(repr(self.value))
def __eq__(self, value):
return '{}'.format(repr(value)) == repr(self)
parser = argparse.ArgumentParser()
parser.add_argument('--param', default='ch1', choices=('ch1', 'ch2', 'ch3', 'ch4=<value>'), type=Arg)
args = parser.parse_args('--param ch4=123'.split())
print('choice {}, value {}'.format(args.param, repr(args.param.value)))
args = parser.parse_args([])
print('choice {}, value {}'.format(args.param, repr(args.param.value)))
args = parser.parse_args('--param ch3'.split())
print('choice {}, value {}'.format(args.param, repr(args.param.value)))
輸出;
choice ch4=<123>, value ['ch4', '123']
choice ch1, value 'ch1'
choice ch3, value 'ch3'
args.param
是Arg
一個實例。 args.param.value
是str
或list
如果選擇是ch4='some_value'
我不認爲這是「開箱即用」。您可能需要刪除'choices',添加'nargs = *',然後自己執行驗證(解析命令後,或在自定義的'type'函數或'argparse.Action'中)。 – mgilson
你想看什麼用法和幫助? – hpaulj