【问题标题】:How to store_true and store value in a mutual exclusive group in argparse?如何在argparse的互斥组中存储真值和存储值?
【发布时间】:2020-05-27 05:43:28
【问题描述】:

我想做这样的事情:

usage: myprogpy [-su | -re STRING | -reg]

如何检查给定了哪些参数(surereg),对于re,如何获取给定的字符串?

ap = argparse.ArgumentParser(prog="myprog.py")
    method_group = ap.add_mutually_exclusive_group()
    method_group.add_argument('-su', '--speedup', action='store_true', dest='method')
    method_group.add_argument('-re', '--relative', action='store_true', dest='method')
    method_group.add_argument('-reg', '--regular', action='store_true', dest='method')
    args = ap.parse_args()

    if args.method == "speedup":
        speedup()

    elif args.method == "relative":
        relative(string_value) # How do I get the string value???

    elif args.method == "regular":
        regular()

是否可以在method 中分配true/false 值,以及将字符串存储在不同的变量中?还有其他方法吗?

【问题讨论】:

  • 如果三个选项中都没有,你希望args.method是什么?
  • @chepner 嗯,可能只是一个默认值
  • 如果你想提供一个字符串,你为什么用store_true代替--re?您需要默认的store。现在不要摆弄argparse 中的dest。之后测试args.suargs.reargs.reg。这样您就不会在解析过程中丢失任何信息。
  • 一个组只是阻止用户使用多个参数,他们仍然可以使用自己的默认目标。事实上,使用常见的dest 会减少您获得的信息。

标签: python arguments argparse


【解决方案1】:

使用(默认)'store''store_const' 操作,而不是 'store_true'

ap = argparse.ArgumentParser(prog="myprog.py")
method_group = ap.add_mutually_exclusive_group()
method_group.add_argument('-su', '--speedup',
                          action='store_const',
                          const='speedup',
                          dest='method')
method_group.add_argument('-re', '--relative',
                          dest='method')
method_group.add_argument('-reg', '--regular',
                          action='store_const',
                          const='regular',
                          dest='method')
args = ap.parse_args()

if args.method == "speedup":
    speedup()
elif args.method == "regular":
    regular()
elif args.method is not None:
    relative(args.method)

【讨论】:

  • 如果我想做 [-su | -re 字符串 | -reg 字符串]。那我怎么知道字符串应该由re还是reg处理呢?
  • 您可以定义一个自定义操作,记录使用的选项及其参数。
  • 如果你必须区分rereg,使用默认的dest。尝试将所有内容分配给同一个 method dest 只会让生活变得复杂。
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2021-11-17
相关资源
最近更新 更多