将 optparse
代码迁移到 argparse
¶
argparse
模块提供了几个 optparse
模块本身不具备的更高级特性,包括:
处理位置参数。
支持子命令。
允许使用
+
和/
等可选选项前缀。处理零个或多个和一个或多个样式的参数。
生成更详细的用法消息。
为自定义
type
和action
提供更简单的接口。
最初,argparse
模块试图保持与 optparse
的兼容性。然而,在支持声明式命令行选项处理(同时将位置参数处理留给应用程序代码),以及在声明式接口中支持命名选项和位置参数之间的根本设计差异意味着 API 随着时间的推移与 optparse
的 API 产生了差异。
正如 选择参数解析库 中所述,目前正在使用 optparse
并且对其工作方式感到满意的应用程序可以继续使用 optparse
。
正在考虑迁移的应用程序开发人员也应该在决定是否需要迁移之前,查看该部分描述的内在行为差异列表。
对于确实选择从 optparse
迁移到 argparse
的应用程序,以下建议应该会有所帮助:
用
ArgumentParser.add_argument()
调用替换所有optparse.OptionParser.add_option()
调用。将
(options, args) = parser.parse_args()
替换为args = parser.parse_args()
,并为位置参数添加额外的ArgumentParser.add_argument()
调用。请记住,之前称为options
的东西,现在在argparse
上下文中称为args
。使用
parse_intermixed_args()
替换optparse.OptionParser.disable_interspersed_args()
,而不是parse_args()
。使用
type
或action
参数替换回调操作和callback_*
关键字参数。用相应的类型对象(例如 int、float、complex 等)替换
type
关键字参数的字符串名称。用
Namespace
替换optparse.Values
,用ArgumentError
替换optparse.OptionError
和optparse.OptionValueError
。用使用字典格式化字符串的标准 Python 语法替换带有隐式参数的字符串,例如
%default
或%prog
,即%(default)s
和%(prog)s
。用调用
parser.add_argument('--version', action='version', version='<版本>')
替换 OptionParser 构造函数的version
参数。