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.
For those of us still stuck on python2.7 for whatever reason, this is a minimal change to locally disable prefix matching:
Now instead of using argparse.ArgumentParser, just use SaneArgumentParser. Unlike chepner's answer, this does not require any modification to the argparse module. It is also a much smaller change. Hopefully other people stuck in python's past will find this useful.
Prior to Python 3.5, you would have to monkeypatch an undocumented
ArgumentParser
method. Don't actually use this; it is untested and may not work with all versions (or any version) of Python. For entertainment purposes only.The ability to disable abbreviated long options was only added in Python 3.5. From the
argparse
documentation:So if you're on Python 3.5, you can create your parser with
allow_abbrev=False
:If you're on optparse or pre-3.5 argparse, you just have to live with abbreviated options.