【问题标题】:Python argparse toggle flagsPython argparse 切换标志
【发布时间】:2012-07-15 12:06:03
【问题描述】:

argparse 中是否有任何方法可以解析 [+-]a,b,c,d 之类的标志?

foo.py +s -b

应该将 True 存储在 sdest 中,并将 False 存储在 bdest 中,就像 Windows attrib 或 Linux chmod 所做的那样。

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

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

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    您可以通过将 -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)
    

    【讨论】:

    • 太好了,不知何故我认为action 将是关键,但错过了定义一个 Action 类。
    猜你喜欢
    • 2017-08-30
    • 2016-04-16
    • 2012-04-22
    • 2014-02-12
    • 2014-07-09
    • 2015-02-03
    • 2017-03-01
    • 2018-04-03
    • 2012-01-05
    相关资源
    最近更新 更多