可以使用argparse.Action
以下示例中的定制方法完成所需的操作:
import argparse
parser = argparse.ArgumentParser()
class DefaultListAction(argparse.Action):
CHOICES = ['clear','copy','dump','lock']
def __call__(self, parser, namespace, values, option_string=None):
if values:
for value in values:
if value not in self.CHOICES:
message = ("invalid choice: {0!r} (choose from {1})"
.format(value,
', '.join([repr(action)
for action in self.CHOICES])))
raise argparse.ArgumentError(self, message)
setattr(namespace, self.dest, values)
parser.add_argument('actions', nargs='*', action=DefaultListAction,
default = ['dump', 'clear'],
Metavar='ACTION')
print parser.parse_args([])
print parser.parse_args(['lock'])
该脚本的输出为:
$ python test.py
Namespace(actions=['dump', 'clear'])
Namespace(actions=['lock'])