Upgrading optparse code¶
Originally, the argparse module had attempted to maintain compatibility
with optparse.  However, optparse was difficult to extend
transparently, particularly with the changes required to support
nargs= specifiers and better usage messages.  When most everything in
optparse had either been copy-pasted over or monkey-patched, it no
longer seemed practical to try to maintain the backwards compatibility.
The argparse module improves on the optparse
module 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 - typeand- action.
A partial upgrade path from optparse to argparse:
- Replace all - optparse.OptionParser.add_option()calls with- ArgumentParser.add_argument()calls.
- Replace - (options, args) = parser.parse_args()with- args = parser.parse_args()and add additional- ArgumentParser.add_argument()calls for the positional arguments. Keep in mind that what was previously called- options, now in the- argparsecontext is called- args.
- Replace - optparse.OptionParser.disable_interspersed_args()by using- parse_intermixed_args()instead of- parse_args().
- Replace callback actions and the - callback_*keyword arguments with- typeor- actionarguments.
- Replace string names for - typekeyword arguments with the corresponding type objects (e.g. int, float, complex, etc).
- Replace - optparse.Valueswith- Namespaceand- optparse.OptionErrorand- optparse.OptionValueErrorwith- ArgumentError.
- Replace strings with implicit arguments such as - %defaultor- %progwith the standard Python syntax to use dictionaries to format strings, that is,- %(default)sand- %(prog)s.
- Replace the OptionParser constructor - versionargument with a call to- parser.add_argument('--version', action='version', version='<the version>').