2

Есть ли у python какой-либо способ легко и быстро сделать утилиты CLI без большого количества аргументов, анализирующих шаблон?Python magical main() подпись как Perl 6

В Perl 6, подпись для MAIN подразделам automagically parses command line arguments.

Есть ли способ сделать что-то подобное в Python без большого количества шаблонного? Если этого не будет, что было бы лучшим способом сделать это? Я думаю о декораторе функции, который будет выполнять некоторые интроспекции и поступать правильно. Если нет ничего подобного, я думаю, что-то вроде того, что у меня внизу. Это хорошая идея?

@MagicMain 
def main(one, two=None, *args, **kwargs): 
    print one # Either --one or first non-dash argument 
    print two # Optional --arg with default value (None) 
    print args # Any other non-dash arguments 
    print kwargs # Any other --arguments 

if __name__ == '__main__': 
    main(sys.argv) 
+0

Параметр 'MAIN' саб ** гораздо ** более мощным, чем этот блог пост-шоу. В качестве примера вы можете иметь несколько подпрограмм «MAIN», которые принимают разные аргументы. Дополнительную информацию см. В [Synopsis 06] (http://perlcabal.org/syn/S06.html#Declaring_a_MAIN_subroutine «Объявление основной подпрограммы»). –

ответ

5

Библиотека Baker содержит некоторые удобные декораторы для «автоматического» создания парсеров arg из сигнатур методов.

Например:

@baker.command 
def test(start, end=None, sortby="time"): 
    print "start=", start, "end=", end, "sort=", sortby 

$ script.py --sortby name 1 
start= 1 end= sortby= name 
+0

Это в точности то, что я себе представлял. Я посмотрю на это и оставлю зеленый печенье для вас, когда я это сделаю :) – Daenyth

2

Я не уверен, что вы считаете синтаксическим шаблоном. «Текущий» подход заключается в использовании системы argparse для python. Старая система - getopt.

+0

'argparse' кажется, что он может быть хорош под капотом декоратора, как я описываю ... Он может удалить все шаблоны' parser.add_argument'. – Daenyth

2

Модуль Simon Willison optfunc пытается обеспечить функциональность, которую вы ищете.

+0

Это выглядит очень многообещающе. – Daenyth