title: argparse subparser monolithic help output
body: <p>My argparse has only 3 flags (store_true) on the top level, everything else is handled through subparsers. When I run <code>myprog.py --help</code>, the output shows a list of all subcommands like normal, <code>{sub1, sub2, sub3, sub4, ...}</code>. So, the default is working great...</p>
  
  <p>I usually can't remember the exact subcommand name I need, and all of its options. So I end up doing 2 help lookups:</p>
  
  <pre><code>myprog.py --help
  myprog.py sub1 --help
  </code></pre>
  
  <p>I do this so often, I decided to cram this into one step. I would rather have my toplevel help output a huge summary, and then I scroll through the list manually. I find it is much faster (for me at least).</p>
  
  <p>I was using a RawDescriptionHelpFormatter, and typing the long help output by hand. But now I have lots of subcommands, and its becoming a pain to manage.</p>
  
  <p>Is there a way to get a verbose help output with just one program call? </p>
  
  <p>If not, how can I iterate the subparsers of my argparse instance, and then retrieve the help output individually from each one (which I will then later glue together)?</p>
  
  <hr>
  
  <p>Here is a quick outline of my argparse setup. I cleaned/stripped the code a fair bit, so this may not run without a bit of help.</p>
  
  <pre><code>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)
  </code></pre>