JS. JS. - 2 months ago 7
Python Question

Argparse: Way to include default values in '--help'?

Suppose I have the following argparse snippet:

diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")


Currently, --help returns:

usage: connection_check.py [-h]
[--version] [--scan-time [SCAN_TIME]]

Test the reliability/uptime of a connection.



optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.


I would prefer something like:

--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)


Peeking at the help formatter code revealed limited options. Is there a clever way to get argparse to print the default value for '--scan-time' in a similar fashion, or should I just sub-class the help formatter?

Answer

Use the argparse.ArgumentDefaultsHelpFormatter formatter:

parser = argparse.ArgumentParser(
    # ... other options ...
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)

To quote the documentation:

The other formatter class available, ArgumentDefaultsHelpFormatter, will add information about the default value of each of the arguments.

Note that this only applies to arguments that have help text defined; with no help value for an argument, there is noting to add information to.

The exact output for your scan-time option then becomes:

  --scan-time [SCAN_TIME]
                        Wait SCAN-TIME seconds between status checks.
                        (default: 5)
Comments