Python argparse切换标志

时间:2012-07-16 15:43:32

标签: python argparse

argparse中有没有办法解析像[+-]a,b,c,d这样的标志?

foo.py +s -b

应该在dest的{​​{1}}中存储True,在s的{​​{1}}中存储为False,就像在Windows dest或Linux {b中完成的那样{1}}。

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

另一种解决方法是使用正则表达式手动解析扩展的arg(在某种程度上看起来更简单并且使用自定义描述,但是然后才这样做我只是想看看周围是否有任何使用它我可以使用argparse本身执行相同的操作。

1 个答案:

答案 0 :(得分: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)