Search code examples
pythonargparseoptparse

Disable unique prefix matches for argparse and optparse


When I use Python's argparse or optparse command line argument parser, any unique prefix of an argument is considered valid, e.g.

$ ./buildall.py --help
usage: buildall.py [-h] [-f]

Build all repositories

optional arguments:
  -h, --help   show this help message and exit
  -f, --force  Build dirty repositories

works with --help, --hel, --he for the help option as well as --forc and --fo for the force option.

Can this behavior be turned off somehow? I want to get an error message for incomplete arguments.


Solution

  • The ability to disable abbreviated long options was only added in Python 3.5. From the argparse documentation:

    The parse_args() method by default allows long options to be abbreviated to a prefix, if the abbreviation is unambiguous (the prefix matches a unique option) ... This feature can be disabled by setting allow_abbrev to False.

    So if you're on Python 3.5, you can create your parser with allow_abbrev=False:

    parser = argparse.ArgumentParser(..., allow_abbrev=False)
    

    If you're on optparse or pre-3.5 argparse, you just have to live with abbreviated options.