【问题标题】:python - argparse one argument instead of several otherspython - argparse一个参数而不是其他几个
【发布时间】:2012-10-31 06:39:51
【问题描述】:

例如我有选项:

parser.add_argument('-b', action="store_true")
parser.add_argument('-c', action="store_true")
parser.add_argument('-d', action="store_true")

我想使用同义词选项“-a”启用所有这些。有可能吗?

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    我认为在parse_args()之后这样做是最简单的:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-b', action="store_true")
    parser.add_argument('-c', action="store_true")
    parser.add_argument('-d', action="store_true")
    parser.add_argument('-a', action="store_true")
    args = parser.parse_args()
    if args.a: args.b = args.c = args.d = True
    

    或者,您可以使用自定义操作来做到这一点,但我认为这有点矫枉过正:

    import argparse
    class AllAction(argparse.Action):
        def __call__(self, parser, args, values, option_string = None):
            # print '{n} {v} {o}'.format(n = args, v = values, o = option_string)
            for param in ['a', 'b', 'c', 'd']:
                setattr(args, param, True)
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-b', action="store_true")
    parser.add_argument('-c', action="store_true")
    parser.add_argument('-d', action="store_true")
    parser.add_argument('-a', action = AllAction, nargs = '?')
    args = parser.parse_args()
    print(args)
    

    【讨论】:

    • 是的,这是可能的解决方案。我想也许有内置的方法可以做到这一点。非常感谢。
    • +1。你写的和我一样,但速度更快,示例代码更完整……
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2020-08-24
    • 2011-10-07
    • 2021-08-27
    • 2014-12-30
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多