Работа с аргументами командной строки в Python — это мощный способ сделать ваши скрипты более гибкими и настраиваемыми. Вместо того чтобы жестко кодировать значения в программе, вы можете передавать их при запуске скрипта.
В Python есть несколько способов обработки аргументов командной строки:
Sys. argv: Самый простой и базовый способ. Argparse: Рекомендуемый способ для создания сложных и удобных интерфейсов командной строки. Getopt: Более старый модуль, похожий на функцию getopt() из C. argparse обычно предпочтительнее.
1. Использование Sys. argv (просто и базово)
Модуль sys предоставляет доступ к системным параметрам. sys. argv — это Список строк, где:
- sys. argv[0] — это имя самого скрипта. sys. argv[1] — это первый аргумент, sys. argv[2] — второй аргумент, и так далее.
Пример (Basic_args. py):
Python
Import sys
Print(f"Имя скрипта: {sys. argv[0]}")
Print(f"Все аргументы: {sys. argv}")
Print(f"Количество аргументов (включая имя скрипта): {len(sys. argv)}")
If len(sys. argv) > 1:
print(f"Первый аргумент: {sys. argv[1]}")
If len(sys. argv) > 2:
print(f"Второй аргумент: {sys. argv[2]}")
Else:
print("Второй аргумент не был предоставлен.")
# Пример использования аргументов
If len(sys. argv) > 1:
try:
# Аргументы всегда приходят как строки, их нужно преобразовывать
number = int(sys. argv[1])
print(f"Вы ввели число: {number}. Его квадрат: {number * number}")
except ValueError:
print(f"Ошибка: ‘{sys. argv[1]}’ не является целым числом.")
Как запустить из командной строки:
Bash
Python basic_args. py
# Вывод:
# Имя скрипта: basic_args. py
# Все аргументы: [‘basic_args. py’]
# Количество аргументов (включая имя скрипта): 1
# Второй аргумент не был предоставлен.
Python basic_args. py hello world 123
# Вывод:
# Имя скрипта: basic_args. py
# Все аргументы: [‘basic_args. py’, ‘hello’, ‘world’, ‘123’]
# Количество аргументов (включая имя скрипта): 4
# Первый аргумент: hello
# Второй аргумент: world
# Ошибка: ‘hello’ не является целым числом.
Python basic_args. py 50
# Вывод:
# Имя скрипта: basic_args. py
# Все аргументы: [‘basic_args. py’, ’50’]
# Количество аргументов (включая имя скрипта): 2
# Первый аргумент: 50
# Второй аргумент не был предоставлен.
# Вы ввели число: 50. Его квадрат: 2500
Недостатки Sys. argv:
- Все аргументы — строки: Вам нужно вручную преобразовывать их в нужные типы (числа, булевы значения и т. д.). Нет обработки флагов/опций: Сложно работать с опциями типа —verbose или — o output. txt. Нет справки: Нет автоматической генерации сообщения о том, какие аргументы принимает скрипт. Ручная проверка: Нужно вручную проверять количество аргументов и их валидность.
2. Использование Argparse (мощно и удобно)
Модуль argparse — это Рекомендуемый способ для обработки аргументов командной строки в Python. Он делает процесс парсинга аргументов гораздо более простым, надежным и профессиональным. Он поддерживает позиционные аргументы, опции (флаги), подкоманды, автоматическую генерацию справки (—help) и многое другое.
Пример (Advanced_args. py):
Python
Import argparse
# 1. Создаем парсер аргументов
Parser = argparse. ArgumentParser(description="Эта программа демонстрирует использование argparse. Она может приветствовать пользователя и выполнять математические операции.")
# 2. Добавляем аргументы
# Позиционный аргумент:
# Это обязательный аргумент, который указывается без флагов.
Parser. add_argument("name", help="Имя пользователя, которого нужно поприветствовать")
# Опциональный аргумент (флаг):
# —verbose или — v: если присутствует, то логируем больше информации.
# action="store_true" означает, что если флаг есть, значение True, иначе False.
Parser. add_argument("-v", "—verbose", action="store_true", help="Включить подробный вывод")
# Опциональный аргумент со значением:
# —age или — a: ожидает числовое значение
Parser. add_argument("-a", "—age", type=int, default=18,
help="Возраст пользователя (по умолчанию: 18)")
# Добавление опциональных аргументов для математической операции
Parser. add_argument("—operation", choices=["add", "subtract", "multiply", "divide"],
help="Математическая операция (add, subtract, multiply, divide)")
Parser. add_argument("—num1", type=float, help="Первое число для операции")
Parser. add_argument("—num2", type=float, help="Второе число для операции")
# 3. Разбираем аргументы, переданные в командной строке
Args = parser. parse_args()
# 4. Используем полученные аргументы
Print(f"Привет, {args. name}!")
If args. verbose:
print(f"Подробный режим включен. Возраст: {args. age}")
print(f"Все аргументы: {args}")
Print(f"Твой возраст: {args. age}")
# Выполнение математической операции, если указаны все необходимые аргументы
If args. operation and args. num1 is not None and args. num2 is not None:
result = None
if args. operation == "add":
result = args. num1 + args. num2
elif args. operation == "subtract":
result = args. num1 — args. num2
elif args. operation == "multiply":
result = args. num1 * args. num2
elif args. operation == "divide":
if args. num2 != 0:
result = args. num1 / args. num2
else:
print("Ошибка: Деление на ноль невозможно!")
if result is not None:
print(f"Результат операции {args. num1} {args. operation} {args. num2} = {result}")
Else:
if args. operation or args. num1 is not None or args. num2 is not None:
print("Чтобы выполнить математическую операцию, укажите —operation, —num1 и —num2.")
Как запустить из командной строки:
Bash
Python advanced_args. py Alice
# Вывод:
# Привет, Alice!
# Твой возраст: 18
Python advanced_args. py Bob — v —age 30
# Вывод:
# Привет, Bob!
# Подробный режим включен. Возраст: 30
# Все аргументы: Namespace(name=’Bob’, verbose=True, age=30, operation=None, num1=None, num2=None)
# Твой возраст: 30
Python advanced_args. py Charlie —operation add —num1 10 —num2 5
# Вывод:
# Привет, Charlie!
# Твой возраст: 18
# Результат операции 10.0 add 5.0 = 15.0
Python advanced_args. py David —help
# Вывод (автоматически генерируемая справка):
# usage: advanced_args. py [-h] [-v] [-a AGE] [—operation {add, subtract, multiply, divide}] [—num1 NUM1] [—num2 NUM2] name
#
# Эта программа демонстрирует использование argparse. Она может приветствовать пользователя и выполнять математические операции.
#
# positional arguments:
# name Имя пользователя, которого нужно поприветствовать
#
# options:
# — h, —help show this help message and exit
# — v, —verbose Включить подробный вывод
# — a AGE, —age AGE Возраст пользователя (по умолчанию: 18)
# —operation {add, subtract, multiply, divide}
# Математическая операция (add, subtract, multiply, divide)
# —num1 NUM1 Первое число для операции
# —num2 NUM2 Второе число для операции
Преимущества Argparse:
- Автоматическая генерация справки: —help работает "из коробки". Типизация аргументов: type=int, type=float автоматически преобразуют строки в нужные типы. Значения по умолчанию: default=18 позволяет задавать значения, если аргумент не указан. Обязательные/опциональные аргументы: Легко настраиваются. Флаги (—verbose, -v): Удобная обработка булевых опций. Выбор из списка (Choices): Ограничивает допустимые значения для аргумента. Обработка ошибок: Автоматически сообщает о некорректных аргументах.
Когда что использовать:
- Используйте Sys. argv для очень простых скриптов, которым нужно всего несколько позиционных аргументов без сложных настроек. Используйте Argparse для большинства реальных приложений командной строки. Это стандартный и наиболее мощный инструмент для этой задачи в Python. Избегайте getopt, если нет веских причин (например, совместимость со старым кодом).
В большинстве случаев, когда вы пишете скрипт, который будет запускаться из командной строки и принимать параметры, Argparse — это ваш лучший выбор.