我想使用python和argparse库创建一个基于命令行的应用程序。但我对这个库有一些挑战,这是命令看起来像(用法):
prog (foo|bar) [-v] (-h "key:value")* [-d inline-data] [-f file] URL
这是 prog help 输出:
> prog help
prog is a simple application
Usage:
prog command [arguments]
The commands are:
foo executes FOO
bar executes BAR
help prints this screen.
Use "prog help [command]" for more information about a command.
我的挑战在于这一部分。当我们执行以下命令时,我想给出单独的帮助描述:
prog help foo
prog帮助栏
import argparse
parser = argparse.ArgumentParser(prog='prog.py',description='some help', add_help=False)
#I turned off the default help, and defined -h separately.
parser.add_argument('-h', '--header', metavar='', help='headerHelpString')
subparsers = parser.add_subparsers(help='help sub-command')
subparserHelp = subparsers.add_parser('help', help='some help')
subparserFooBar = subparserHelp.add_argument('method', choices=['foo', 'bar'])
group = parser.add_mutually_exclusive_group()
group.add_argument('-q', '--quiet', action='store_true', help='print quiet')
group.add_argument('-v', '--verbose', action='store_true', help='print verbose')
args = parser.parse_args()
答案 0 :(得分:1)
没有参数,我收到错误 - 它需要subparsers命令'help'。根据定义,顶部有几个标记的参数。 subsparser的参数不会显示在用法中(如果已启用,则显示完整的帮助)。
1327:~/mypy$ python stack46982125.py
usage: prog.py [-h] [-q | -v] {help} ...
prog.py: error: too few arguments
在Py3中,subparsers是“可选的”,显示了要设置的内容:
1328:~/mypy$ python3 stack46982125.py
Namespace(header=None, quiet=False, verbose=False)
使用'help'subparser,用法包括'[ - h]',但这是默认帮助。子分析器不继承add_help
参数;你必须明确地设置它。
1328:~/mypy$ python3 stack46982125.py help
usage: prog.py help [-h] {foo,bar}
prog.py help: error: the following arguments are required: method
利用-h
,我可以得到更全面的帮助。
1329:~/mypy$ python3 stack46982125.py help -h
usage: prog.py help [-h] {foo,bar}
positional arguments:
{foo,bar}
optional arguments:
-h, --help show this help message and exit
如果我还定义了所需的'foo / bar',它解析得很好。
1329:~/mypy$ python3 stack46982125.py help foo
Namespace(header=None, method='foo', quiet=False, verbose=False)
如果我添加
parser.print_help()
subparserHelp.print_help()
我得到了额外的输出:
usage: prog.py [-h] [-q | -v] {help} ...
some help
positional arguments:
{help} help sub-command
help some help
optional arguments:
-h , --header headerHelpString
-q, --quiet print quiet
-v, --verbose print verbose
usage: prog.py help [-h] {foo,bar}
positional arguments:
{foo,bar}
optional arguments:
-h, --help show this help message and exit
如果我添加dest
参数
subparsers = parser.add_subparsers(dest='cmd', help='help sub-command')
使印刷品成为条件
if args.cmd == 'help':
parser.print_help()
subparserHelp.print_help()
没有显示帮助(在py3中)或上面的错误(py2)
1340:~/mypy$ python3 stack46982125.py
Namespace(cmd=None, header=None, quiet=False, verbose=False)
显示帮助:
1341:~/mypy$ python3 stack46982125.py help foo
Namespace(cmd='help', header=None, method='foo', quiet=False, verbose=False)
....
如果您关闭-h
帮助,则必须以某种方式捕获“帮助”字符串,并使用您自己的帮助或print_help
方法对其进行操作。您还可以定义另一个标记的参数,并为其指定action='help'
参数。
您真的需要关闭默认add_help
。使用默认帮助方法不是更简单吗?您的用户可能更熟悉。