6

我一直在寻找解决方案来添加一个行为为 的参数action='store_const',但会采用多个值。

因此,如果我根本不通过它,它应该没有值(或某个值),如果我没有值传递它应该有默认值,如果我用值传递它应该是一个列表这些值。

例如

parser.parse_args(''.split())
parser.parse_args('-a'.split())
parser.parse_args('-a 1 2 3'.split())

应该导致

[None]
[0]
[1, 2, 3]
4

1 回答 1

5

不是太难:

parser = argparse.ArgumentParser()
parser.add_argument('-a',default=[None],action='store',type=int,nargs='*')
print parser.parse_args(''.split())
print parser.parse_args('-a'.split())
print parser.parse_args('-a 1 2 3'.split())

如果您想在-a没有额外参数的情况下进行特殊处理,则不使用自定义操作就无法做到这一点:

import argparse
class MyAction(argparse.Action):
    def __call__(self,parser,namespace,values,option_string=None):
        if not values:
            setattr(namespace,self.dest,[0])
        else:
            setattr(namespace,self.dest,values)

parser = argparse.ArgumentParser()
parser.add_argument('-a',default=[None],action=MyAction,type=int,nargs='*')
print parser.parse_args(''.split())
print parser.parse_args('-a'.split())
print parser.parse_args('-a 1 2 3'.split())
于 2013-04-05T14:50:06.067 回答