аргументы командной строки gem / git-стиля в Python

Есть ли модуль Python для выполнения аргументов командной строки gem / git? Я имею в виду стиль gem / git:

$ ./MyApp.py The most commonly used MyApp commands are: add Add file contents to the index bisect Find by binary search the change that introduced a bug branch List, create, or delete branches checkout Checkout a branch or paths to the working tree ... $ ./MyApp.py branch * current-branch master 

Без аргументов выход сообщает вам, как вы можете продолжить. И есть специальная команда «help»:

 $ ./MyApp.py help branch 

Что дает вам более глубокие советы о команде «branch».

Изменить: И, делая это, я имею в виду, что для вас используется печать использования, выходы с недопустимым вводом, выполняет ваши функции в соответствии с вашей спецификацией CLI. Сортировка «URL-карты» для командной строки.

2 Solutions collect form web for “аргументы командной строки gem / git-стиля в Python”

Да, argparse с add_subparser() .

Все это объяснено в разделе « Подкоманды ».

Копирование одного из примеров оттуда:

 >>> parser = argparse.ArgumentParser() >>> subparsers = parser.add_subparsers() >>> checkout = subparsers.add_parser('checkout', aliases=['co']) >>> checkout.add_argument('foo') >>> parser.parse_args(['checkout', 'bar']) Namespace(foo='bar') 

Изменить: К сожалению, нет специальной команды специальной help , но вы можете получить подробное справочное сообщение (которое вам кажется) с -h или --help как обычно, после команды:

 $ ./MyApp.py branch --help 

По подробному я не имею в виду, что это похоже на справочную страницу, это похоже на любую другую помощь – перечисление всех аргументов и т. Д.

Пример:

 >>> parser = argparse.ArgumentParser() >>> subparsers = parser.add_subparsers(description='Sub description') >>> checkout = subparsers.add_parser('checkout', description='Checkout description') >>> checkout.add_argument('foo', help='This is the foo help') >>> parser.parse_args(['checkout', '--help']) usage: checkout [-h] foo Checkout description positional arguments: foo This is the foo help optional arguments: -h, --help show this help message and exit 

Если вам нужно, должно быть легко реализовать команду help которая перенаправляет на --help .

Разумный взлом, чтобы получить «помощь» стиля gem / git (я только написал это для того, над чем я работаю).

 parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='sub_commands') parser_branch = subparsers.add_parser('branch', description='list of branches') parser_help = subparsers.add_parser('help') parser_help.add_argument('command', nargs="?", default=None) # I can't find a legitimate way to set a default subparser in the docs # If you know of one, please let me know! if len(sys.argv) < 2: sys.argv.append('--help') parsed = parser.parse_args() if parsed.sub_commands == "help": if not parsed.command: parser.parse_args(['--help']) else: parser.parse_args([parsed.command, '--help']) 

argparse определенно является шагом вперед от optparse и других решений python, с которыми я столкнулся. Но IMO стиль gem / git для обработки args – это более логичный и безопасный способ делать что-то, поэтому раздражает то, что он не поддерживается.

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