Python Magical Main () подпись, как Perl 6 - PullRequest
2 голосов
/ 05 октября 2010

Есть ли у python способ легко и быстро создавать утилиты CLI без большого количества шаблонов разбора аргументов?

В Perl 6 подпись для MAIN sub автоматически анализирует аргументы командной строки.1005 *

Есть ли способ сделать что-то подобное в 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)

Ответы [ 6 ]

5 голосов
/ 05 октября 2010

Библиотека 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
2 голосов
/ 05 октября 2010

Модуль optfunc Саймона Уиллисона пытается обеспечить требуемую функциональность.

2 голосов
/ 05 октября 2010

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

1 голос
/ 10 декабря 2012

Модуль opterator обрабатывает это.

https://github.com/buchuki/opterator

0 голосов
/ 16 апреля 2018

Недавно я наткнулся на начинающий проект по декорированию и упрощению обработки командной строки.

Кажется, он предлагает множество тех же самых функций, которые вы ищете.

0 голосов
/ 05 октября 2010

В Python есть модуль getopts для этого.

...