Python argparse切换标志

nba*_*tec 9 python argparse

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

foo.py +s -b
Run Code Online (Sandbox Code Playgroud)

应存放在真正dests和虚假destb,很像由Windows完成attrib或Linux的chmod.

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

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

eca*_*mur 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)
Run Code Online (Sandbox Code Playgroud)