Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to group arguments into sections for a program's help message

Is it possible to add some sub sections on optional arguments? So it would be easier for user to understand which argument is related with which argument?

I mean for example psql --help, outputs this (I don't know which arguments parse library psql uses, but giving it just as a good example of desired output):

Usage:
  psql [OPTION]... [DBNAME [USERNAME]]

General options:
  -c, --command=COMMAND    run only single command (SQL or internal) and exit
  -d, --dbname=DBNAME      database name to connect to (default: "oerp")
  -f, --file=FILENAME      execute commands from file, then exit
  -l, --list               list available databases, then exit
  -v, --set=, --variable=NAME=VALUE
                           set psql variable NAME to VALUE
                           (e.g., -v ON_ERROR_STOP=1)
  -V, --version            output version information, then exit
  -X, --no-psqlrc          do not read startup file (~/.psqlrc)
  -1 ("one"), --single-transaction
                           execute as a single transaction (if non-interactive)
  -?, --help[=options]     show this help, then exit
      --help=commands      list backslash commands, then exit
      --help=variables     list special variables, then exit

Input and output options:
  -a, --echo-all           echo all input from script
  -b, --echo-errors        echo failed commands
  -e, --echo-queries       echo commands sent to server
  -E, --echo-hidden        display queries that internal commands generate
  -L, --log-file=FILENAME  send session log to file
  -n, --no-readline        disable enhanced command line editing (readline)
  -o, --output=FILENAME    send query results to file (or |pipe)
  -q, --quiet              run quietly (no messages, only query output)
  -s, --single-step        single-step mode (confirm each query)
  -S, --single-line        single-line mode (end of line terminates SQL command)

Output format options:
  -A, --no-align           unaligned table output mode
  -F, --field-separator=STRING
                           field separator for unaligned output (default: "|")
  -H, --html               HTML table output mode
  -P, --pset=VAR[=ARG]     set printing option VAR to ARG (see \pset command)
  -R, --record-separator=STRING
                           record separator for unaligned output (default: newline)
  -t, --tuples-only        print rows only
  -T, --table-attr=TEXT    set HTML table tag attributes (e.g., width, border)
  -x, --expanded           turn on expanded table output
  -z, --field-separator-zero
                           set field separator for unaligned output to zero byte
  -0, --record-separator-zero
                           set record separator for unaligned output to zero byte

Connection options:
  -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")
  -p, --port=PORT          database server port (default: "5432")
  -U, --username=USERNAME  database user name (default: "oerp")
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)

For more information, type "\?" (for internal commands) or "\help" (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.

Report bugs to <[email protected]>.

And there are sections like General options, Input and output options and so on.

With argparse, I only get positional arguments and optional arguments options. Is it possible to make some subsections for optional arguments?

like image 657
Andrius Avatar asked Mar 04 '23 12:03

Andrius


1 Answers

As BoarGules mentioned in a comment, you want ArgumentParser.add_argument_group().

Example code copied here, modified:

import argparse

parser = argparse.ArgumentParser(prog='PROG')

group = parser.add_argument_group('group')
group.add_argument('--foo', help='foo help')
group.add_argument('bar', help='bar help')

other_group = parser.add_argument_group('other group')
other_group.add_argument('baz', help='baz help')

parser.print_help()

Output:

usage: PROG [-h] [--foo FOO] bar baz

optional arguments:
  -h, --help  show this help message and exit

group:
  --foo FOO   foo help
  bar         bar help

other group:
  baz         baz help
like image 193
2 revs Avatar answered May 04 '23 00:05

2 revs