2012-10-15 57 views
-1

在python脚本中我想要有三个位置参数和两个可选参数(包括'help')。所以,我需要的是像下面argparse - python

正确:

./myscript.py ONE TWO THREE 
./myscript.py --list 

错误:

./myscript.py ONE TWO THREE --list 

我要让所有的位置参数,并使用argparse本身可选的参数为互斥。

+1

你好。你的问题对于ServerFault来说是离题的,并且对于基于更多编码的StackOverflow可能会更好。 – tombull89

+0

http://docs.python.org/howto/argparse.html#id1 –

+0

我使用条件制定了解决方案。据我所知,使用argparse本身没有办法做到这一点。当前版本的argparse仅支持一种情况下的互斥选项。像[A | B]而不是[A,B,C | D] – Suku

回答

2

这approxmates你想要什么:

class Three(argparse.Action): 
    # custom action that requires 0 or 3 values 
    def __call__(self,parser,namespace,values,option_string): 
     if len(values) in [0,3]: 
      setattr(namespace, self.dest, values) 
     else: 
      raise argparse.ArgumentError(self,'must have 3 values') 

custom = 'usage: %(prog)s [-h] (--list | ONE TWO THREE)' 
p=argparse.ArgumentParser(prog='PROG',usage=custom) 
g=p.add_mutually_exclusive_group(required=True) 
g.add_argument('--list',action='store_true') 
g.add_argument('pos',nargs='*',default=[],action=Three) 

,它提出了一个错误,如果双方--listpos给出,如果没有给出,或者pos值的数量并不3.我包括在内,因为自定义使用默认为:

usage: PROG [-h] (--list | pos [pos ...])