Upgrading optparse code¶
Originally, theargparse module had attempted to maintain compatibilitywithoptparse. However,optparse was difficult to extendtransparently, particularly with the changes required to supportnargs= specifiers and better usage messages. When most everything inoptparse had either been copy-pasted over or monkey-patched, it nolonger seemed practical to try to maintain the backwards compatibility.
Theargparse module improves on theoptparsemodule in a number of ways including:
Handling positional arguments.
Supporting subcommands.
Allowing alternative option prefixes like
+and/.Handling zero-or-more and one-or-more style arguments.
Producing more informative usage messages.
Providing a much simpler interface for custom
typeandaction.
A partial upgrade path fromoptparse toargparse:
Replace all
optparse.OptionParser.add_option()calls withArgumentParser.add_argument()calls.Replace
(options,args)=parser.parse_args()withargs=parser.parse_args()and add additionalArgumentParser.add_argument()calls for the positional arguments. Keep in mind that what was previouslycalledoptions, now in theargparsecontext is calledargs.Replace
optparse.OptionParser.disable_interspersed_args()by usingparse_intermixed_args()instead ofparse_args().Replace callback actions and the
callback_*keyword arguments withtypeoractionarguments.Replace string names for
typekeyword arguments with the correspondingtype objects (e.g. int, float, complex, etc).Replace
optparse.ValueswithNamespaceandoptparse.OptionErrorandoptparse.OptionValueErrorwithArgumentError.Replace strings with implicit arguments such as
%defaultor%progwiththe standard Python syntax to use dictionaries to format strings, that is,%(default)sand%(prog)s.Replace the OptionParser constructor
versionargument with a call toparser.add_argument('--version',action='version',version='<theversion>').