Я использую 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