0Pricing
Python Academy · Урок

Подкоманды и параметры

Создавайте сложные CLI

«Подкоманды и параметры» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Зачем нужны подкоманды?

У таких инструментов, как git, есть подкоманды: git add, git commit. argparse поддерживает их с помощью подпарсеров, у каждого из которых есть собственные аргументы.

import argparse

parser = argparse.ArgumentParser(prog='tool')
sub = parser.add_subparsers(dest='command')
print('subparsers ready')

Добавление подпарсеров

add_subparsers возвращает объект, чей метод add_parser создаёт каждую подкоманду. Параметр dest сохраняет сведения о выбранной подкоманде.

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
sub.add_parser('start')
sub.add_parser('stop')
args = parser.parse_args(['start'])
print('command:', args.command)

Аргументы отдельных подкоманд

Каждый подпарсер может определять собственные аргументы. Подкоманда add в этом примере принимает имя, а list — ничего.

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('name')
sub.add_parser('list')
args = parser.parse_args(['add', 'milk'])
print(args.command, args.name)

Выбор действия по команде

После разбора аргументов проверьте args.command, чтобы запустить нужную логику.

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('item')
sub.add_parser('clear')

args = parser.parse_args(['add', 'eggs'])
if args.command == 'add':
    print('adding', args.item)
elif args.command == 'clear':
    print('clearing all')

Обработчики с set_defaults

Удобный подход — прикрепить функцию к каждому подпарсеру с помощью set_defaults(func=...), а затем вызвать args.func(args).

import argparse

def do_hi(args):
    print('hi', args.who)

parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
p = sub.add_parser('hi')
p.add_argument('who')
p.set_defaults(func=do_hi)

args = parser.parse_args(['hi', 'Ana'])
args.func(args)

Общие параметры через родительские анализаторы

Родительский анализатор содержит параметры, общие для нескольких подкоманд, что позволяет избежать повторений. Передайте parents=[base] и add_help=False.

import argparse

base = argparse.ArgumentParser(add_help=False)
base.add_argument('--verbose', action='store_true')

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
sub.add_parser('run', parents=[base])
args = parser.parse_args(['run', '--verbose'])
print(args.cmd, args.verbose)

Значения по умолчанию для каждого параметра

Параметры подкоманд могут иметь собственные значения по умолчанию и типы, как и аргументы верхнего уровня.

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
p = sub.add_parser('scale')
p.add_argument('--factor', type=float, default=1.0)
args = parser.parse_args(['scale'])
print('factor:', args.factor)

Добавление повторяющихся параметров

action='append' позволяет указывать флаг несколько раз, собирая каждое значение в список.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--tag', action='append', default=[])
args = parser.parse_args(['--tag', 'a', '--tag', 'b'])
print(args.tag)

Подсчёт флагов

action='count' подсчитывает, сколько раз встречается флаг; это классический шаблон повышения подробности вывода с помощью -vvv.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-v', action='count', default=0)
args = parser.parse_args(['-v', '-v', '-v'])
print('verbosity level:', args.v)

Инструмент с двумя командами

Объединение подкоманд, обработчиков и общих параметров даёт структурированный CLI с несколькими командами.

import argparse

def add(args):
    print('add', args.item, 'qty', args.qty)

def remove(args):
    print('remove', args.item)

parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
pa = sub.add_parser('add')
pa.add_argument('item')
pa.add_argument('--qty', type=int, default=1)
pa.set_defaults(func=add)
pr = sub.add_parser('remove')
pr.add_argument('item')
pr.set_defaults(func=remove)

args = parser.parse_args(['add', 'pen', '--qty', '3'])
args.func(args)

Обязательная подкоманда

Установите required=True для подпарсеров, чтобы пользователь был обязан выбрать команду; в противном случае argparse завершится с ошибкой.

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd', required=True)
sub.add_parser('go')
args = parser.parse_args(['go'])
print('chosen:', args.cmd)

Быстрая проверка

Проверьте своё понимание подкоманд и параметров.

Итоги

Вы изучили подкоманды и параметры:

  • add_subparsers и add_parser создают инструменты с несколькими командами.
  • set_defaults(func=...) передаёт выполнение обработчикам.
  • Родительские анализаторы позволяют совместно использовать общие параметры.
  • Действия append и count обрабатывают повторяющиеся флаги.

Далее: библиотека Click для создания CLI на основе декораторов.

Часто задаваемые вопросы

Урок «Подкоманды и параметры» бесплатный?

Да — полный текст урока «Подкоманды и параметры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Подкоманды и параметры»?

Создавайте сложные CLI Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Подкоманды и параметры»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы argparse
  2. Подкоманды и параметры
  3. Библиотека Click
  4. Расширенный вывод в терминале
← Назад к Python Academy