Как убрать точки (`...`) в выводе argparse help (`-h`), когда вы подпарсеры для подкоманд? - PullRequest
0 голосов
/ 13 февраля 2020

Я использую argparse с подпарсерами для анализа подкоманд issue, scan и progress.

Моя проблема в том, что меню справки (-h) отображает три точки ( ...) после подкоманды, что заставляет некоторых клиентов думать, что они могут предоставить несколько подкоманд в командной строке:

nlykkei:~/projects/BurpProxyServer (master)$ python3 api.py -h
usage: api.py [-h] [-d DOMAIN] [-p PORT] [-a APIKEY] [-L LOG] [-V] [-v | -s] command ...

Можно ли удалить точки и отобразить сообщение справки, например:

nlykkei:~/projects/BurpProxyServer (master)$ python3 api.py -h
usage: api.py [-h] [-d DOMAIN] [-p PORT] [-a APIKEY] [-L LOG] [-V] [-v | -s] <issue|scan|progress> 

Есть идеи?

fmt = lambda prog: argparse.HelpFormatter(prog, width=250)
p = argparse.ArgumentParser(description='Burp REST API client', formatter_class=fmt)

p.add_argument('-d', '--domain', type=str, default='localhost', metavar='DOMAIN', help='Burp REST API domain')
p.add_argument('-p', '--port', type=int, default=8888, metavar='PORT', help='Burp REST API port')
p.add_argument('-a', '--apikey', type=str, metavar='APIKEY', help='API key for accessing Burp REST API')
p.add_argument('-L', '--log', type=str, default='/tmp/test.log', metavar='LOG', help='Enable logging to %(metavar)s')
p.add_argument('-V', '--version', action='version', version='%(prog)s 1.0 (BETA)')

group = p.add_mutually_exclusive_group()
group.add_argument('-v', '--verbose', action='count', help='increase verbosity')
group.add_argument('-s', '--silent', action='store_true', help='silent')

sp = p.add_subparsers(title='subcommand', dest='command', metavar='command', required=True, help='additional help')

# subcommand: issue
p_issue = sp.add_parser('issue', help='issue definitions', parents=[])

# subcommand: scan
p_scan = sp.add_parser('scan', help='scan target', parents=[])
p_scan.add_argument('url', type=str, nargs='+', metavar='URL', help='Target %(metavar)ss')
p_scan.add_argument('-U', '--username', type=str, metavar='USERNAME', help='Username for authentication')
p_scan.add_argument('-P', '--password', type=str, metavar='PASSWORD', help='Password for authentication')

# subcommand: progress
p_progress = sp.add_parser('progress', help='scan progress', parents=[])
p_progress.add_argument('scan_id', type=int, metavar='ID', help='Scan ID to retrive information for')
p_progress.add_argument('-A', '--after', type=str, metavar='AFTER', help='Limit results to issue events after given issue event ID')
p_progress.add_argument('-l', '--limit', type=int, metavar='AFTER', help='Maximum number of issue events to return')

args = p.parse_args()


nlykkei:~/projects/BurpProxyServer (master)$ python3 api.py -h
usage: api.py [-h] [-d DOMAIN] [-p PORT] [-a APIKEY] [-L LOG] [-V] [-v | -s] command ...

Burp REST API client

optional arguments:
  -h, --help            show this help message and exit
  -d DOMAIN, --domain DOMAIN
                        Burp REST API domain
  -p PORT, --port PORT  Burp REST API port
  -a APIKEY, --apikey APIKEY
                        API key for accessing Burp REST API
  -L LOG, --log LOG     Enable logging to LOG
  -V, --version         show program's version number and exit
  -v, --verbose         increase verbosity
  -s, --silent          silent

subcommand:
  command               additional help
    issue               issue definitions
    scan                scan target
    progress            scan progress
...