Python argparse切换标志

Python argparse toggle flags

argparse中是否有任何方法来分析像[+-]a,b,c,d这样的标志?

1
foo.py +s -b

应该在sdest中存储true,在bdest中存储false,就像windows attrib或linux chmod所做的那样。

目前,我用两个独立的论据,分别是+s-sstore_truestore_false。但它会给每个标记列出两次(+A&A;-A),带来难看的帮助。

另一个解决方法是用regex手动解析扩展的arg(这看起来很简单,并且使用自定义描述,但是在执行之前,我只是想看看是否有任何可以使用arg parse本身执行相同操作的东西。


您可以通过将-s+s同时传递给单个add_argument调用,并使用自定义操作来完成此操作:

1
2
3
4
5
6
7
8
9
10
11
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)