Python: argparse 子命令子命令?

7

我有一个程序,其中有许多可用选项。例如,配置选项可以更改设置。

./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

到目前为止,我还没有找到在子命令中使用子命令的方法。如果有可能,该如何实现呢?如果不行,是否有其他方法可以实现这个目标?

提前感谢。


如果你把你的代码贴在这里,会更好,这样可以帮助其他人理解你的问题。 - number5
1
我建议大家查看click库 https://click.palletsprojects.com/en/7.x/quickstart/#nesting-commands - Jonathan
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)

我尝试过2.7.2版本,如果你有任何问题,一定要告诉我 :) - Derek Litz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接