は、ここで私はまた、スティーブン・ラウフの答えのように(私は答えとしてそれをマークしますけれども、私は、参照(迅速かつ汚いバージョン)のためにやったことだ - ESP。私は)私の解決策のための内部実装の詳細を使用するので:
class CustomArgumentsParser(argparse.ArgumentParser):
def _parse_optional(self, arg_string):
suffix_index = arg_string.find(':')
if suffix_index < 0:
return super(CustomArgumentParser, self)._parse_optional(arg_string)
original_arg_string = arg_string
suffix = arg_string[suffix_index + 1:]
arg_string = arg_string[0:suffix_index]
option_tuple = super(CustomArgumentParser, self)._parse_optional(arg_string)
if not option_tuple:
return option_tuple
action, option_string, explicit_arg = option_tuple
if isinstance(action, BuildListAction):
return action, suffix, explicit_arg
else:
self.exit(-1, message='Unknown argument %s' % original_arg_string)
class BuildListAction(argparse.Action):
def __init__(self,
option_strings,
dest,
nargs=None,
const=None,
default=None,
type=None,
choices=None,
required=False,
help=None,
metavar=None):
super(BuildListAction, self).__init__(
option_strings=option_strings,
dest=dest,
nargs=nargs,
const=const,
default=default,
type=type,
choices=choices,
required=required,
help=help,
metavar=metavar)
def __call__(self, parser, namespace, values, option_string=None):
index = int(option_string) - 1
list = getattr(namespace, self.dest)
if list is None:
list = []
setattr(namespace, self.dest, list)
if index >= len(list):
list.extend([self.default] * (index + 1 - len(list)))
list[index] = values
使用法:
argparser = CustomArgumentsParser()
argparser.add_argument('--xyz', type=int, action=BuildListAction)
注 - これは、フォーム--xyzの引数サポートしています、2 ..:1、--xyzをこれは元の質問とは少し異なります。
'action = 'append''は、' --xyz'フラグを再利用させ、指定された順序で値を収集します。 '--xyz 10 --xyz 25 --xyz 31' – hpaulj
私はさまざまなarg名を使う必要があります。システムの別の部分からの要件です。ですから、私は--xyz1、--xyz2、--xyz3などを扱う必要があります。 –
これらの変数名キーの多くはありますか?このような3、または100? – hpaulj