команда по умолчанию с Python argparse - PullRequest
1 голос
/ 04 февраля 2020

Как сказано в официальном документе argparse, ,

Один из особенно эффективных способов обработки подкоманд состоит в том, чтобы объединить использование метода add_subparsers () с вызовами set_defaults ()

Я хотел бы реализовать некоторые команды, такие как foo и bar, где foo - это команда по умолчанию . Какой самый простой способ? Эти команды имеют общие и не общие аргументы и параметры. Команда foo по умолчанию имеет только параметры, без аргументов.

Обязательная командная строка и вывод:

$ python m.py
foo
$ python m.py -a
foo(a)
$ python m.py foo
foo
$ python m.py foo -a
foo(a)
$ python m.py bar
bar
$ python m.py bar -b
bar(b)

Заранее спасибо!

ДОБАВЛЕНО:

My код в настоящее время выглядит следующим образом:

import argparse

def a(args):
    print(f'a({args})')

def b(args):
    print(f'b({args})')

def main():
    parser = argparse.ArgumentParser()
    parser.set_defaults(func=a) # default command

    sp = parser.add_subparsers()

    pa = sp.add_parser('a')         # subcommand
    pa.set_defaults(func=a)
    pa.add_argument('-p')
    pa.add_argument('-q')

    pb = sp.add_parser('b')         # subcommand
    pb.set_defaults(func=b)
    pb.add_argument('-p')
    pb.add_argument('-x')

    args = parser.parse_args()      # https://docs.python.org/ja/3/library/argparse.html#sub-commands
    args.func(args)

if __name__ == "__main__":
    main()

Поскольку -p и -q являются параметрами команды a, анализатор по умолчанию не распознает их. Если я добавлю parser.add_argument ('- p'), это будет работать. Однако если я укажу -p для основного и вспомогательного синтаксических анализаторов на python m.py -p 1 a -p 2, это будет позволено , и последний имеет приоритет. Это подвержено ошибкам, и я хотел бы поднять некоторые исключения для конфликта. Кроме того, , если я добавлю required=True, это требуется обоим парсерам, парсер требует конфликта, которого я бы хотел избежать.

...