升级 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>')的调用。