📝 Python

argparse: аргументы командной строки в Python

0
Author
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Published
08.05.2026
⏱️
Reading time
2 min
👁️
Views
30
🌱
Level
Beginner

Когда скрипт вырастает из игрушки в инструмент, input() становится неудобным. Профессиональные CLI-программы принимают аргументы при запуске — как git commit -m "fix" или python manage.py migrate. В Python для этого есть встроенный модуль argparse.

Проблема с input()

# Неудобно: нужно запустить и ждать вопроса
python tool.py
> Введите команду: issues
> Введите репозиторий: my-repo
# Удобно: всё сразу в одной команде
python tool.py issues my-repo
python tool.py issues my-repo --state closed

Второй вариант можно вставить в cron, скрипт автоматизации или вызвать из другой программы.

Базовый синтаксис

import argparse

parser = argparse.ArgumentParser(description="Описание программы")

# Позиционный аргумент (обязательный):
parser.add_argument("repo", help="Название репозитория")

# Опциональный аргумент (с --):
parser.add_argument("--state", default="open", help="Статус issues")

args = parser.parse_args()
print(args.repo)    # значение из командной строки
print(args.state)   # "open" или переданное значение

Запуск:

python tool.py my-repo               # args.repo = "my-repo", args.state = "open"
python tool.py my-repo --state all   # args.state = "all"

Типы аргументов

# Строка (по умолчанию):
parser.add_argument("--query")

# Целое число:
parser.add_argument("--days", type=int, default=7)

# Флаг True/False:
parser.add_argument("--execute", action="store_true")
# python tool.py          → args.execute = False
# python tool.py --execute → args.execute = True

# Ограниченный список значений:
parser.add_argument("--state", choices=["open", "closed", "all"], default="open")

Подкоманды (subparsers)

Для сложных CLI с несколькими командами используют подкоманды — как у git:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="command", help="Команда")

# Подкоманда "issues":
issues_p = subparsers.add_parser("issues", help="Список issues")
issues_p.add_argument("repo")
issues_p.add_argument("--state", choices=["open","closed","all"], default="open")

# Подкоманда "create":
create_p = subparsers.add_parser("create", help="Создать issue")
create_p.add_argument("repo")
create_p.add_argument("--title", required=True)
create_p.add_argument("--body", default="")

args = parser.parse_args()

if args.command == "issues":
    # args.repo, args.state доступны
    ...
elif args.command == "create":
    # args.repo, args.title, args.body доступны
    ...
elif args.command is None:
    parser.print_help()

Запуск:

python tool.py issues my-repo
python tool.py issues my-repo --state closed
python tool.py create my-repo --title "Bug fix"
python tool.py --help          # автоматически сгенерированная справка
python tool.py issues --help   # справка по подкоманде

Автоматическая справка

argparse генерирует --help бесплатно:

$ python tool.py --help
usage: tool.py [-h] {issues,create,close,repos,search} ...

GitHub Automation Tool

positional arguments:
  {issues,create,close,repos,search}
    issues    Список issues репозитория
    create    Создать issue
    ...

options:
  -h, --help  show this help message and exit

required=True и nargs

# Обязательный опциональный аргумент:
parser.add_argument("--title", required=True)

# Принимает несколько значений:
parser.add_argument("--labels", nargs="+")  # один или больше
# python tool.py --labels bug enhancement → ["bug", "enhancement"]

Итог

argparse превращает скрипт в настоящий CLI-инструмент:
- Все параметры передаются при запуске, не через input()
- Автоматическая справка --help
- Валидация типов (type=int) и допустимых значений (choices=)
- Флаги --execute для управления поведением
- Подкоманды для группировки команд

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

Модуль datetime: работа с датами и временем

datetime — стандартный модуль Python для работы с датами и временем. Входит в стандартную библиотеку,...

📅 08.05.2026 👁️ 30
📝

.env файлы и переменные окружения: секреты вне ко…

Представь что ты написал программу с API-ключом прямо в коде и залил её на GitHub....

📅 08.05.2026 👁️ 34
📝

Виртуальные окружения в Python: зачем и как

Когда начинаешь второй Python-проект и ставишь pip install requests — эта библиотека устанавливается глобально, для...

📅 08.05.2026 👁️ 30

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!