2014-02-19 2 views
0

Моя цель состоит в том, чтобы иметьмерзавец как команды в питона

  • myScript init не более запустить класс/действие InitAction.
  • myScript foo /tmp запустить класс/действие FooAction, используя данную "/ TMP"

С argparse Я сделал этот анализатор

parser = argparse.ArgumentParser(description="Look like GIT!") 

parserCommands = parser.add_subparsers(title="Actions") 

init_parser = parserCommands.add_argument('init', help='Set up') 
destroy_parser = parserCommands.add_parser('destroy', help='Tear down') 

Хорошо до сюда, но я хочу, чтобы связать init с InitAction(argparse.Action). Что-то, что работает как action=InitAction, но, к сожалению, этого там не допускается.

У вас есть ключ к запуску InitAction при написании myScript.py init в терминале?

ответ

2

argparse документации есть пример вызова функции на основе команды subparser

16.4.5.1. Подкоманды

Одним из особенно эффективных способов обработки подкоманд является объединение использования метода add_subparsers() с вызовами set_defaults(), чтобы каждый подпараметр знал, какую функцию Python он должен выполнить. Например:

>>> # create the parser for the "foo" command 
>>> parser_foo = subparsers.add_parser('foo') 
>>> ... 
>>> parser_foo.set_defaults(func=foo) 
... 
>>> # parse the args and call whatever function was selected 
>>> args = parser.parse_args('foo 1 -x 2'.split()) 
>>> args.func(args) 

После этого является примером использования 'Цел':

аргумент Dest ключевое слово в add_subparsers() вызов будет работать»

Я не Думаю, вы хотите подкласс argparse.Action. Обычно Action помещает значение в пространство имен args. Строка «init» на самом деле является значением, которое подпанелирует Action для передачи управления на init_parser. Вот почему ваш собственный класс Action не подходит. То, что вы хотите, это функция, которая может быть запущена после завершения parse_args, и все, что ей нужно использовать, - args.

Смежные вопросы