2013-08-09 2 views
3

Мой вопрос по существу является продолжением до this question. Это показывает, как вы можете использовать plac для автоматического создания интерфейса командной строки с под-командами, представляющими каждую функцию.Определение общих опций для подкоманд с plac

Можно ли сообщить plac о параметрах, которые являются общими для всех подкоманд, и их можно рассматривать как «глобальные» варианты? Фактически, эти параметры должны иметь смысл без подкоманды.

В качестве примера, я мог бы svn checkout и svn update суб-команд, но и как команда svn -v или svn --version.

ответ

0

Я ржавый на plac, поэтому я сначала обращусь к этому из основного использования argparse.

p = argparse.ArgumentParser(version='1.2.3') 
sp = p.add_subparser() 
sp.add_parser('checkout') 
sp.add_parser('update') 

p.parse_args(['-v']) возвращается 1.2.3 и выходы. Но -v похож на -h, специальный аргумент.

p.parse_args([]), но дает ошибку too few arguments. то есть он ожидает подкоманду. То же самое было бы верно, если бы этот глобальный вариант был чем-то вроде -d.

Пару квалификации:

  • новые версии указать «версии» аргумент по-другому.

  • в 3.3, подкоманды больше не требуются. Это связано с изменением сообщения об ошибках требуемых аргументов и может/или может быть неверным с будущими изменениями.

Я думаю, что эти ограничения все еще применяются, если парсер генерируется plac, но я должен был бы рассмотреть plac код, чтобы убедиться.

1

Пару лет назад я установил многопроцессорный скрипт, используя plac. Он имел несколько команд с перекрывающимися наборами аргументов. Я постараюсь абстрагироваться, что я сделал

class Interface(object): 
    commands = ['fn1','fn2',...] 
    dict1 = dict(quiet=(...), dryrun=(...), ...) 
    dict2 = dict() 
    dict3 = dict() 

    dict1.update(dict2) 
    @plac.annotations(**dict1) 
    def fn1(self, dryrun, quiet, ...) 
     ... 
    @plac.annotations(foo=(...), **dict2) 
    def fn2(self, foo, ...) 
     ... 
    @plac.annotations(**dict2) 
    def fn3(self, ...) 
     ... 

Таким образом, хотя аргументы для каждой функции должны были быть прописаны в полном объеме, примечания могут быть построены путем смешивания и сопоставления различных словарей.

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