argparse 中有什么方法可以解析像 [+-]a,b,c,d
这样的标志吗?
foo.py +s -b
应该将 True 存储在 s
的 dest
中,将 False 存储在 b
的 dest
中,就像完成的一样通过 Windows attrib
或 Linux chmod
。
目前,我使用 2 个单独的参数 +s
和 -s
分别与 store_true
和 store_false
.但是它创建了一个丑陋的帮助,它列出了每个标志两次 (+a & -a)
另一种解决方法是使用正则表达式手动解析扩展的 arg(不知何故似乎更容易使用自定义描述,但是在这样做之前我只是想看看周围是否有任何东西使用它我可以使用 argparse 本身执行相同的操作。
最佳答案
您可以通过将 -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)
关于Python argparse 切换标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507756/