Python: argparse 子命令的子命令?
我有一个程序,里面有很多可用的选项。比如,有一个配置选项可以用来改变设置。
./app config -h
这个选项可以通过正常的 argparse 子命令来获取帮助。
现在我想在配置的子命令下再添加一个叫做 list 的子命令,用来列出配置的值。
./app config list
另外,这个命令还应该接受一个额外的选项,这样我就可以说
./app config list CATEGORY
只列出某一类别的配置。
我现在的代码基本上是这样,只是有更多的命令。
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(title='subcommands',
... description='valid subcommands',
... help='additional help')
>>> subparsers.add_parser('foo')
>>> subparsers.add_parser('bar')
>>> parser.parse_args(['-h'])
usage: [-h] {foo,bar} ...
optional arguments:
-h, --help show this help message and exit
subcommands:
valid subcommands
{foo,bar} additional help
到目前为止,我还没有找到在子命令中使用子命令的方法。如果可以的话,怎么做?如果不行,还有其他方法可以实现这个目标吗?
提前谢谢你!
1 个回答
10
#file: argp.py
import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser_subparsers = parser.add_subparsers()
sub = parser_subparsers.add_parser('sub')
sub_subparsers = sub.add_subparsers()
sub_sub = sub_subparsers.add_parser('sub_sub')
sub_sub_subparsers = sub_sub.add_subparsers()
sub_sub_sub = sub_sub_subparsers.add_parser('sub_sub_sub')
看起来可以用。
In [392]: run argp.py
In [393]: parser.parse_args('sub sub_sub sub_sub_sub'.split())
Out[393]: Namespace()
In [400]: sys.version_info
Out[400]: sys.version_info(major=2, minor=7, micro=2, releaselevel='final', serial=0)