Die monolithische Hilfeausgabe des Subparsers argparse

Mein Argument hat nur 3 Flags (store_true) auf der obersten Ebene, alles andere wird über Subparser behandelt. Wenn ich rennemyprog.py --helpzeigt die Ausgabe eine Liste aller Unterbefehle wie normal,{sub1, sub2, sub3, sub4, ...}. Die Standardeinstellung funktioniert also hervorragend ...

Normalerweise kann ich mich nicht an den genauen Unterbefehlsnamen und alle seine Optionen erinnern. Am Ende mache ich zwei Hilfesuchen:

myprog.py --help
myprog.py sub1 --help

Ich mache das so oft, dass ich mich entschlossen habe, es in einen Schritt zu packen. Ich möchte lieber, dass meine Toplevel-Hilfe eine große Zusammenfassung ausgibt, und dann scrolle ich manuell durch die Liste. Ich finde es viel schneller (zumindest für mich).

Ich habe einen RawDescriptionHelpFormatter verwendet und die lange Hilfe-Ausgabe von Hand eingegeben. Aber jetzt habe ich viele Unterbefehle und es wird schwierig, damit umzugehen.

Gibt es eine Möglichkeit, mit nur einem Programmaufruf eine ausführliche Hilfeausgabe zu erhalten?

Wenn nicht, wie kann ich die Subparser meiner argparse-Instanz durchlaufen und dann die Hilfeausgabe für jede einzelne Instanz abrufen (die ich dann später zusammenklebe)?

Hier ist ein kurzer Überblick über meine Argumentation. Ich habe den Code ein gutes Stück gesäubert / gestrippt, so dass dies möglicherweise nicht ohne ein bisschen Hilfe funktioniert.

parser = argparse.ArgumentParser(
        prog='myprog.py',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description=textwrap.dedent(""" You can manually type Help here """) )

parser.add_argument('--debuglog', action='store_true', help='Verbose logging for debug purposes.')
parser.add_argument('--ipyonexit', action='store_true', help='Drop into an embeded Ipython session instead of exiting command.')

subparser = parser.add_subparsers()

### --- Subparser B
parser_b = subparser.add_parser('pdfreport', description="Used to output reports in PDF format.")
parser_b.add_argument('type', type=str, choices=['flatlist', 'nested', 'custom'],
                        help="The type of PDF report to generate.")
parser_b.add_argument('--of', type=str, default='',
                        help="Override the path/name of the output file.")
parser_b.add_argument('--pagesize', type=str, choices=['letter', '3x5', '5x7'], default='letter',
                        help="Override page size in output PDF.")
parser_b.set_defaults(func=cmd_pdf_report)

### ---- Subparser C
parser_c = subparser.add_parser('dbtables', description="Used to perform direct DB import/export using XLS files.")
parser_c.add_argument('action', type=str, choices=['push', 'pull', 'append', 'update'],
                        help="The action to perform on the Database Tables.")
parser_c.add_argument('tablename', nargs="+",
                        help="The name(s) of the DB-Table to operate on.")
parser_c.set_defaults(func=cmd_db_tables)

args = parser.parse_args()
args.func(args)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage