2012-07-16 53 views
9

有没有什么办法在argparse中解析flags如[+-]a,b,c,dPython argparse切换标志

foo.py +s -b 

应在s和假的真dest存储的bdest,很像由Windows attrib或Linux的chmod完成。

目前,我正在分别使用2个独立参数+s-s分别使用store_truestore_false。但是,它创建了一个丑陋的帮助,它列出了每个标志两次(+一& -a)

另一个解决方法是手动解析与正则表达式的扩展ARG(这在某种程度上似乎是一个极大的方便,使用自定义的描述,之前这样做,我只是想看看有没有用,我可以进行使用argparse本身同样的事情,任何事情。

回答

5

你可以通过两种-s+s到一个add_argument通话,并使用自定义操作做到这一点:

class ToggleAction(argparse.Action): 
    def __call__(self, parser, ns, values, option): 
     setattr(ns, self.dest, bool("-+".index(option[0]))) 
ap = ArgumentParser(prefix_chars='-+') 
ap.add_argument('-s', '+s', action=ToggleAction, nargs=0) 

ap.parse_args(['+s']) 
Namespace(s=True) 

ap.parse_args(['-s']) 
Namespace(s=False) 
+0

太棒了,不知何故,我认为'行动'将是关键,但错过了定义一个行动类。 – nbaztec 2012-07-17 07:56:24