Перенос кода с optparse на argparse
Модуль argparse предоставляет несколько возможностей более высокого уровня, которые не встроены в модуль optparse, в том числе:
- Обработку позиционных аргументов.
- Поддержку подкоманд.
- Возможность использовать альтернативные префиксы параметров, например
+и/. - Обработку аргументов, которые могут встречаться ноль или более раз либо один или более раз.
- Создание более информативных сообщений об использовании.
- Предоставление гораздо более простого интерфейса для пользовательских
typeиaction.
Изначально модуль argparse стремился поддерживать совместимость с optparse. Однако фундаментальные различия в проектировании — поддержка декларативной обработки параметров командной строки (при этом обработка позиционных аргументов оставляется коду приложения) и поддержка как именованных параметров, так и позиционных аргументов в декларативном интерфейсе — со временем привели к расхождению 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>').
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/howto/argparse-optparse.html