ArgumentParser.parse args: примеры (PYTHON)
ArgumentParser.parse_args(args: list = None, namespace: Namespace = None): NamespaceОписание функции parse_args
Метод parse_args() принадлежит классу argparse.ArgumentParser. Эта функция выполняет анализ аргументов командной строки, которые передаются скрипту Python. Применение функции актуально при необходимости создания программ с интерфейсом командной строки, где требуется гибкая обработка параметров, флагов и аргументов.
Использование функции предполагает предварительное конфигурирование парсера с помощью методов add_argument(). Функция parse_args() считывает аргументы из sys.argv, однако может принимать и произвольный список строк.
Аргументы метода
- args (опционально): Список строк для анализа. По умолчанию используется
sys.argv[1:]. - namespace (опционально): Объект, в который будут помещены атрибуты. По умолчанию создается новый объект
Namespace.
Возвращаемое значение
Функция возвращает объект Namespace, содержащий атрибуты, соответствующие добавленным аргументам. При использовании подкоманд возвращается также объект Namespace, но структура может быть вложенной.
Базовые примеры применения
Пример с обязательными позиционными аргументами:
import argparse
parser = argparse.ArgumentParser(description='Складывает два числа.')
parser.add_argument('x', type=int, help='первое слагаемое')
parser.add_argument('y', type=int, help='второе слагаемое')
args = parser.parse_args(['5', '3'])
print(f'Результат: {args.x + args.y}')Результат: 8
Пример с необязательными именованными аргументами и флагами:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--name', default='мир', help='имя для приветствия')
parser.add_argument('--verbose', '-v', action='store_true', help='подробный вывод')
args = parser.parse_args(['--name', 'Пользователь', '-v'])
if args.verbose:
print(f'Программа запущена. Привет, {args.name}!')
else:
print(f'Привет, {args.name}!')Программа запущена. Привет, Пользователь!
Похожие инструменты в Python
В стандартной библиотеке Python также присутствует модуль getopt, который предоставляет более низкоуровневый интерфейс, похожий на функцию C getopt(). Он менее удобен для сложных сценариев, но может быть полезен для простого анализа.
Сторонние библиотеки, такие как click и docopt, предлагают альтернативные декларативные подходы. Click использует декораторы для определения параметров, что делает код более компактным для создания CLI-приложений. Docopt позволяет описывать интерфейс в строке документации.
Выбор инструмента зависит от сложности задачи. Argparse является стандартным и наиболее универсальным решением. Click удобен для быстрого создания приложений с множеством команд. Getopt подходит для очень простых случаев или при необходимости совместимости со старым кодом.
Аналоги в других языках программирования
В JavaScript (Node.js) для аналогичных целей используют модуль yargs или встроенный process.argv. Yargs предоставляет богатый API для парсинга.
// yargs пример
const yargs = require('yargs');
const argv = yargs.option('name', {
alias: 'n',
describe: 'Имя для приветствия',
default: 'мир'
}).argv;
console.log(`Привет, ${argv.name}!`);$ node script.js --name Иван Привет, Иван!
В Java популярны библиотеки Apache Commons CLI и JCommander. Они требуют большего объема кода для настройки по сравнению с argparse.
В Go парсинг аргументов осуществляется через пакет flag из стандартной библиотеки. Его синтаксис отличается, но идеология схожа.
// Go пример
package main
import (
"flag"
"fmt"
)
func main() {
name := flag.String("name", "мир", "имя для приветствия")
flag.Parse()
fmt.Printf("Привет, %s!\n", *name)
}$ go run script.go -name Иван Привет, Иван!
В PHP для анализа аргументов CLI-скриптов используется глобальный массив $argv и функции типа getopt(). В C# распространена библиотека CommandLineParser. В Lua часто применяются простые самописные парсеры или библиотеки like argparse (вдохновленная Python).
Распространенные ошибки
Одна из частых ошибок - конфликт имен аргументов при использовании префиксов.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--data')
parser.add_argument('--data-file') # Может возникнуть конфликт преобразования в имя атрибута
args = parser.parse_args(['--data', 'value1', '--data-file', 'file.txt'])
print(args.data_file) # Ожидается 'file.txt'file.txt
Ошибка возникает при неправильном указании типа аргумента.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('number', type=int)
try:
args = parser.parse_args(['не_число'])
except SystemExit:
print("Ошибка: неверный тип аргумента.")usage: script.py [-h] number script.py: error: argument number: invalid int value: 'не_число'
Проблемы могут появиться при смешивании позиционных и опциональных аргументов, если не соблюдается порядок.
Изменения в новых версиях Python
В Python 3.7 была добавлена поддержка описания текста справки с помощью параметра description в add_argument(). В Python 3.9 появилось улучшенное отображение ошибок для подкоманд. В Python 3.10 были добавлены новые действия, такие как BooleanOptionalAction, позволяющее использовать флаги вида --flag и --no-flag одновременно.
Например, использование BooleanOptionalAction:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action=argparse.BooleanOptionalAction)
args = parser.parse_args(['--verbose']) # args.verbose будет True
args2 = parser.parse_args(['--no-verbose']) # args2.verbose будет FalseЭти изменения повышают удобство и гибкость модуля argparse.
Расширенные примеры использования
Пример с подкомандами, как в git (commit, push):
import argparse
parser = argparse.ArgumentParser(prog='git')
subparsers = parser.add_subparsers(dest='command', help='доступные команды')
parser_commit = subparsers.add_parser('commit', help='фиксация изменений')
parser_commit.add_argument('-m', '--message', required=True)
parser_push = subparsers.add_parser('push', help='отправка изменений')
parser_push.add_argument('--force', action='store_true')
args = parser.parse_args(['commit', '-m', 'новый коммит'])
print(f'Команда: {args.command}, сообщение: {args.message}')Команда: commit, сообщение: новый коммит
Пример с пользовательским типом и валидацией:
import argparse
def valid_port(value):
try:
port = int(value)
if not 1 <= port <= 65535:
raise argparse.ArgumentTypeError(f"Порт {port} вне диапазона 1-65535")
return port
except ValueError:
raise argparse.ArgumentTypeError(f"Ожидается число, получено '{value}'")
parser = argparse.ArgumentParser()
parser.add_argument('--port', type=valid_port, default=80)
args = parser.parse_args(['--port', '8080'])
print(f'Порт: {args.port}')Порт: 8080
Пример с mutually exclusive group (взаимоисключающие аргументы):
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--enable', action='store_true')
group.add_argument('--disable', action='store_true')
args = parser.parse_args(['--enable'])
print(f'Состояние: {args.enable}')Состояние: True
Пример чтения аргументов из файла с использованием fromfile_prefix_chars:
import argparse
parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
parser.add_argument('--host')
parser.add_argument('--port')
# Создаем файл config.txt с содержимым:
# --host
# localhost
# --port
# 5432
args = parser.parse_args(['@config.txt'])
print(f'Подключение к {args.host}:{args.port}')Подключение к localhost:5432
питон ArgumentParser.parse_args function comments
- питон ArgumentParser.parse args - аргументы и возвращаемое значение
- Функция python ArgumentParser.parse_args - описание
- ArgumentParser.parse args - примеры
- ArgumentParser.parse args - похожие методы на python
- ArgumentParser.parse_args на php, c#, sql, java
- ArgumentParser.parse args изменения python
- Примеры ArgumentParser.parse_args на питон