Python argparse:将multiple-value参数与default和const结合使用

前端之家收集整理的这篇文章主要介绍了Python argparse:将multiple-value参数与default和const结合使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

因此,如果我根本不传递它,它应该没有值(或某个值),如果我传递它没有值它应该有默认值,如果我传递它有值(s)它应该是一个列表这些价值观.

例如

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

应该导致

  1. [None]
  2. [0]
  3. [1,2,3]
最佳答案
不是太难:

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

如果您想要特殊情况-a而没有其他参数,那么在不使用自定义Action的情况下无法执行此操作:

  1. import argparse
  2. class MyAction(argparse.Action):
  3. def __call__(self,parser,namespace,values,option_string=None):
  4. if not values:
  5. setattr(namespace,self.dest,[0])
  6. else:
  7. setattr(namespace,values)
  8. parser = argparse.ArgumentParser()
  9. parser.add_argument('-a',action=MyAction,nargs='*')
  10. print parser.parse_args(''.split())
  11. print parser.parse_args('-a'.split())
  12. print parser.parse_args('-a 1 2 3'.split())

猜你在找的Python相关文章