Как store_true и сохранить значение во взаимоисключающей группе в argparse? - PullRequest
1 голос
/ 11 февраля 2020

Я хочу сделать что-то вроде этого:

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

Как проверить, какой из аргументов был задан (su, re, reg), а в случае 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()

Можно ли получить true/false значение в method, а также сохранить строку в другой переменной? Есть ли другой способ?

1 Ответ

0 голосов
/ 11 февраля 2020

Используйте действия (по умолчанию) '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)
...