Миграция кода с optparse на argparse¶Migrating 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>').