Документация Python неофициальный перевод

Миграция кода с optparse на argparseMigrating optparse code to argparse

Модуль argparse предлагает несколько функций более высокого уровня, изначально не предоставляемых модулем optparse, в том числе:

  • Обработка позиционных аргументов.

  • Поддержка подкоманд.

  • Разрешение альтернативных префиксов параметров, например + и /.

  • Обработка аргументов в стиле «ноль или более» и «один или более».

  • Формирование более информативных сообщений об использовании.

  • Предоставление гораздо более простого интерфейса для пользовательских type и action.

Изначально модуль argparse пытался поддерживать совместимость с optparse. Однако фундаментальные различия в архитектуре между поддержкой декларативной обработки параметров командной строки (оставляя обработку позиционных аргументов коду приложения) и поддержкой как именованных параметров, так и позиционных аргументов в декларативном интерфейсе привели к тому, что API со временем отошёл от API optparse.

Как описано в Выбор библиотеки для разбора аргументов, приложения, которые в настоящее время используют optparse и довольны его работой, могут просто продолжать использовать optparse.

Разработчикам приложений, рассматривающим возможность миграции, также следует ознакомиться со списком внутренних поведенческих различий, описанных в этом разделе, прежде чем решить, желательна ли миграция.

Для приложений, которые всё же решат перейти с optparse на argparse, следующие рекомендации могут оказаться полезными:

  • Замените все вызовы optparse.OptionParser.add_option() на вызовы ArgumentParser.add_argument().

  • Замените (options, args) = parser.parse_args() на args = parser.parse_args() и добавьте дополнительные вызовы ArgumentParser.add_argument() для позиционных аргументов. Имейте в виду, что то, что ранее называлось options, теперь в контексте argparse называется args.

  • Замените optparse.OptionParser.disable_interspersed_args(), используя parse_intermixed_args() вместо parse_args().

  • Замените колбэк-действия и аргументы-ключевые слова callback_* на аргументы type или action.

  • Замените строковые имена для ключевых аргументов type соответствующими объектами типов (например, int, float, complex и т.д.).

  • Замените optparse.Values на Namespace, а optparse.OptionError и optparse.OptionValueError на ArgumentError.

  • Замените строки с неявными аргументами, такими как %default или %prog, на стандартный синтаксис Python для использования словарей при форматировании строк, то есть %(default)s и %(prog)s.

  • Замените аргумент version конструктора OptionParser на вызов parser.add_argument('--version', action='version', version='<the version>').