Python has a built in argument parser called argparse. It's the first library most folks use when writing a quick CLI tool. However, it's often quickly abandoned once the app grows in complexity. Unfrotunately, too quickly.
I'm also guilty of too quickly switching to click (nice package) or fire (least favourite evil). I think that's because I have outdated view of what
argparse can and cannot do. Just the other day, through accidental laziness I've learned that by default
argparse does prefix matching. A flag can be shortened to the shortest unique prefix. For example, if a program has a flag
--verbose it can be called with
--verbose. This is a very useful feature that I've been missing out on.
Here's a quick example:
import argparse parser = argparse.ArgumentParser() parser.add_argument('--very-big-number', type=float) parser.add_argument('--verbose', action='store_true') args = parser.parse_args() args = parser.parse_args('--very 4242.42 --verb'.split()) print(args) # Namespace(very_big_number=4242.42, verbose=True)
And if there's an overlap in prefixes then
argparse will raise an error:
args = parser.parse_args('--ver'.split()) # usage: test.py [-h] [--very-big-number VERY_BIG_NUMBER] [--verbose] # test.py: error: ambiguous option: --ver could match --verbose, --very-big-number