9

argparse 中有什么方法可以解析像这样的标志[+-]a,b,c,d吗?

foo.py +s -b

应该在 of 中存储 True ,在destof 中存储sFalse destb就像 Windowsattrib或 Linux所做的那样chmod

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

另一种解决方法是使用正则表达式手动解析扩展的 arg(这似乎更容易并使用自定义描述,在此之前,我只想看看是否有任何东西可以使用 argparse 本身执行相同的操作。

4

1 回答 1

6

您可以通过将-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)
于 2012-07-16T18:49:58.167 回答