升级 optparse 代码¶
起初,argparse
模块尝试通过 optparse
来维持兼容性。 但是,optparse
很难透明地进行扩展,特别是那些为支持新的 nargs=
描述方式和更好的用法消息所需的修改。 当 optparse
中几乎所有内容都已被复制粘贴或打上补丁时,维持向下兼容看来已是不切实际的。
argparse
模块在许多方面对 optparse
模块进行了增强,包括:
处理位置参数。
支持子命令。
允许替代选项前缀例如
+
和/
。处理零个或多个以及一个或多个风格的参数。
生成更具信息量的用法消息。
提供用于定制
type
和action
的更为简单的接口。
从 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
。将隐式参数字符串例如使用标准 Python 字典语法的
%default
或%prog
替换为格式字符串,即%(default)s
和%(prog)s
。将 OptionParser 构造器
version
参数替换为对parser.add_argument('--version', action='version', version='<the version>')
的调用。