python argparse – добавить действие к subparser без аргументов?

Я добавляю subparsers в свой синтаксический анализатор для имитации функциональных возможностей подкоманд (например, код см. В разделе: Простая приложение командной строки в python – проанализировать ввод пользователя? ). Теперь я хочу добавить команду subpars / quit которая не принимает аргументов и имеет действие «выйти». Является ли это возможным ? Как я могу это сделать?

  • Могу ли я реализовать пользовательский отступ для довольно-типовой печати в модуле JSON Python?
  • Как связать ключ пробела с определенным методом в tkinter (python)
  • Получить «фактическую» длину строки в символах Юникода
  • Как импортировать таблицу с заголовками в фрейм данных с помощью модуля pandas
  • Создание кода Python 2.7 с помощью Python 2.6
  • Преобразовать список в кортеж в Python
  • Используя модуль запросов, как обрабатывать «set-cookie» в ответе на запрос?
  • Как читать конфиг из строки или списка?
  • One Solution collect form web for “python argparse – добавить действие к subparser без аргументов?”

    Документация для subcommands дает два примера того, как идентифицировать подпараметр.

    https://docs.python.org/dev/library/argparse.html#sub-commands

    Один из них – дать add_subparsers dest :

     def do_quit(args): # action quit() parser = ArgumentParser() subparser = parser.add_subparsers(dest='cmd') .... subparser.add_parser('quit') ... args = parser.parse_args() print args.cmd # displays 'quit' if args.cmd == 'quit': do_quit(args) 

    другой – использовать set_defaults для связывания подпарамера с функцией:

     parser = ArgumentParser() subparsers = parser.add_subparsers() ... parser_quit = subparsers.add_parser('quit') parser_quit.set_defaults(func=do_quit) ... args = parser.parse_args() args.func(args) 

    По дальнейшей мысли, вот способ, используя пользовательское Action . Это похоже на _HelpAction (который используется a -h ). Он nargs=0 позиционным аргументом с nargs=0 (или '?'). Такой аргумент всегда называется, хотя нет никаких строк для его соответствия (вернее, 0 строк соответствуют ему). Это логичное, но несколько неясное следствие того, как обрабатываются позиционные элементы.

     class QuitAction(argparse.Action): def __call__(self, parser, *args, **kwargs): parser.exit(message="QUITTING\n") p=argparse.ArgumentParser() sp=p.add_subparsers(dest='cmd') p1=sp.add_parser('quit') p1.add_argument('foo', action=QuitAction, nargs='?', help=argparse.SUPPRESS) p.parse_args(['quit']) 

    (при запуске в Ipython):

     QUITTING An exception has occurred, use %tb to see the full traceback. SystemExit: 0 от QUITTING An exception has occurred, use %tb to see the full traceback. SystemExit: 0 
    Interesting Posts

    Установить значение для выбранной ячейки в pandas DataFrame

    Python многопроцессорно работает с несколькими входами

    Эмулятор браузера Python с поддержкой JS

    Я получаю IndentationError. Как это исправить?

    Как избежать «Разрешения отказа» при использовании pip с virtualenv

    Доверительные интервалы для прогнозирования модели

    Python версии 2.7: XML ElementTree: как выполнять итерацию через определенные элементы дочернего элемента, чтобы найти совпадение

    Доля моделей sqlalchemy между флягой и другими приложениями

    Группировать по внешнему ключу и показать связанные элементы – Django

    Как преобразовать XML в JSON в Python?

    Почему аргументы по умолчанию оцениваются во время определения в Python?

    Тернарное выражение в понимании словаря

    фатальная ошибка: файл «string.h» не найден после обновления до python 3.2 и установки определенных модулей из virtualenv

    Какая лучшая библиотека для чтения тегов ID3?

    Emmet – Notepad ++ «Неизвестное исключение»

    Python - лучший язык программирования в мире.