将 optparse
代码迁移到 argparse
¶
argparse
模块提供了 optparse
模块不原生提供的几个高级功能,包括
处理位置参数。
支持子命令。
允许使用替代选项前缀,例如
+
和/
。处理零个或多个以及一个或多个样式的参数。
生成信息更丰富的用法消息。
为自定义
type
和action
提供更简单的接口。
最初,argparse
模块试图保持与 optparse
的兼容性。然而,支持声明式命令行选项处理(同时将位置参数处理留给应用程序代码)与在声明式接口中同时支持命名选项和位置参数之间的根本设计差异意味着其 API 随着时间的推移与 optparse
的 API 产生了分歧。
如 选择一个参数解析库 中所述,目前正在使用 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
。通过使用
parse_intermixed_args()
而不是parse_args()
来替换optparse.OptionParser.disable_interspersed_args()
。将回调动作和
callback_*
关键字参数替换为type
或action
参数。将
type
关键字参数的字符串名称替换为相应的类型对象(例如 int, float, complex 等)。将
optparse.Values
替换为Namespace
,并将optparse.OptionError
和optparse.OptionValueError
替换为ArgumentError
。将带有隐式参数(例如
%default
或%prog
)的字符串替换为使用字典格式化字符串的标准 Python 语法,即%(default)s
和%(prog)s
。将 OptionParser 构造函数的
version
参数替换为调用parser.add_argument('--version', action='version', version='<the version>')
。