argparse中有没有办法解析像[+-]a,b,c,d
这样的标志?
foo.py +s -b
应该在dest
的{{1}}中存储True,在s
的{{1}}中存储为False,就像在Windows dest
或Linux {b
中完成的那样{1}}。
目前,我分别使用2个单独的参数attrib
和chmod
与+s
和-s
。但它创造了一个丑陋的帮助,它列出了每个标志两次(+ a& -a)
另一种解决方法是使用正则表达式手动解析扩展的arg(在某种程度上看起来更简单并且使用自定义描述,但是然后才这样做我只是想看看周围是否有任何使用它我可以使用argparse本身执行相同的操作。
答案 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)