我有这个示例代码:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('config')
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose')
group.add_argument('--quiet')
commands = parser.add_subparsers()
command = commands.add_parser('upload')
command.add_argument('path')
command.add_argument('--url')
command = commands.add_parser('check')
group = command.add_mutually_exclusive_group()
group.add_argument('--md5')
group.add_argument('--path')
if __name__=='__main__':
parser.parse_args()
使用--help运行此命令:
usage: argparse_example.py [-h] [--verbose VERBOSE | --quiet QUIET]
config {upload,check} ...
positional arguments:
config
{upload,check}
optional arguments:
-h, --help show this help message and exit
--verbose VERBOSE
--quiet QUIET
我希望它显示的是:
usage: argparse_example.py [-h] [--verbose VERBOSE | --quiet QUIET]
config {upload,check} ...
positional arguments:
config
{upload,check}
optional arguments:
-h, --help show this help message and exit
--verbose VERBOSE
--quiet QUIET
sub-commands:
upload [-h] [--url URL] path
positional arguments:
path
optional arguments:
-h, --help show this help message and exit
--url URL
check [-h] [--md5 MD5 | --path PATH]
optional arguments:
-h, --help show this help message and exit
--md5 MD5
--path PATH
我确实已经实现了一个HelpFormatter子类,但很快就丢失了。
有没有人有这样一个子类的可行实现?
答案 0 :(得分:0)
这足够接近吗?除了调整title
和prog
之外,我正在创建所有帮助字符串,缩进subparser,并将它们组合成字符串。
parser = ArgumentParser(prog='PROG')
parser.add_argument('config')
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose')
group.add_argument('--quiet')
commands = parser.add_subparsers(title='subcommands')
command1 = commands.add_parser('upload',prog='upload')
command1.add_argument('path')
command1.add_argument('--url')
command2 = commands.add_parser('check',prog='check')
group = command2.add_mutually_exclusive_group()
group.add_argument('--md5')
group.add_argument('--path')
fmt1 = parser.format_help()
fmt2 = command1.format_help()
fmt2 = fmt2.replace('usage: ','')
fmt2 = fmt2.replace('\n','\n ')
fmt3 = command2.format_help()
fmt3 = fmt3.replace('usage: ','')
fmt3 = fmt3.replace('\n','\n ')
print('%s\n%s\n%s'%(fmt1,fmt2,fmt3))
产生:
usage: PROG [-h] [--verbose VERBOSE | --quiet QUIET] config {upload,check} ...
positional arguments:
config
optional arguments:
-h, --help show this help message and exit
--verbose VERBOSE
--quiet QUIET
subcommands:
{upload,check}
upload [-h] [--url URL] path
positional arguments:
path
optional arguments:
-h, --help show this help message and exit
--url URL
check [-h] [--md5 MD5 | --path PATH]
optional arguments:
-h, --help show this help message and exit
--md5 MD5
--path PATH
调用此输出是另一个问题。它应该由parser.format_help()
生成,即-h
。另一个可选的行为方式相同吗?通过常规选择?