Search code examples
pythonargparse

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 subclass the help formatter?


Solution

  • 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 no help message to add information about the default value to.

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

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