当前位置: 首页 > 面试题库 >

如何使用python argparse解析多个嵌套子命令?

邢永安
2023-03-14
问题内容

我正在实现一个命令行程序,其界面如下:

cmd [GLOBAL_OPTIONS] {command [COMMAND_OPTS]} [{command [COMMAND_OPTS]} ...]

我已经阅读了argparse文档。我可以GLOBAL_OPTIONS使用add_argumentin实现为可选参数argparse。以及{command [COMMAND_OPTS]}using子命令。

从文档看来,我只能有一个子命令。但是如您所见,我必须实现一个或多个子命令。解析此类命令行参数使用的最佳方法是什么argparse


问题答案:

@mgilson对这个问题有很好的答案。但是我自己拆分sys.argv的问题是我丢失了Argparse为用户生成的所有有用的帮助消息。所以我最终这样做:

import argparse

## This function takes the 'extra' attribute from global namespace and re-parses it to create separate namespaces for all other chained commands.
def parse_extra (parser, namespace):
  namespaces = []
  extra = namespace.extra
  while extra:
    n = parser.parse_args(extra)
    extra = n.extra
    namespaces.append(n)

  return namespaces

argparser=argparse.ArgumentParser()
subparsers = argparser.add_subparsers(help='sub-command help', dest='subparser_name')

parser_a = subparsers.add_parser('command_a', help = "command_a help")
## Setup options for parser_a

## Add nargs="*" for zero or more other commands
argparser.add_argument('extra', nargs = "*", help = 'Other commands')

## Do similar stuff for other sub-parsers

现在,在第一次解析之后,所有链接的命令都存储在中extra。我会在它不为空的情况下对其进行重新解析,以获取所有链接的命令并为其创建单独的命名空间。而且我得到了argparse生成的更好的用法字符串。



 类似资料:
  • 对于“航班”组合应用程序,我正在尝试为飞机上的每个座位生成机票(以便航班预先填充一些人)。这是一个功能的一部分,该功能还将航班预先填充到数据库以设置数据。有对数据库的调用,以检查航班号和确认号是否是唯一的,而不是预先存在的。在航班的情况下,如果航班号已经存在,则该航班将被删除。但是,如果确认号处于循环状态时已经存在,则重新生成确认号的异步方面遇到了一些问题。所以本质上,我遇到的问题: Genera

  • 这是我的示例html代码。 使用HtmlXpath Selector我需要解析html文件。 def parse(自己,响应):edxData=HtmlXpath Selector(响应) 首先,我需要获取所有包含 edxData.xpath 的标记('//h2[@class = “标题课程-标题”]') 在该标签内,我需要检查标签值。 然后需要解析带有类名字幕课程 - 字幕复制 - 详细信息的d

  • 我可以在中解析多级嵌套结构吗,就像我们在Java和库中所做的那样? 我已经对此进行了探索。 在Apex Salesforce中解析JSON 但是我想要一个通用的解决方案,它可以将任何JSON解析为所需的Apex对象。

  • 问题内容: 我正在尝试从上述JSON检索邮政编码。我正在用gson解析它。我是JSON的新手,从我在这里的所有文章中读到的内容(有些与此类似),我都知道字段名称应保持原样。所以我知道我必须做出4类,即响应,视图,结果和地址。我使它们成为静态嵌套类,但是我只得到空值作为输出。在下一个JSON中,我有多个地址。但是我只停留在这个单一的回应上。 举一个简短的例子,我尝试使用此代码检索Timestamp,

  • 我想做的是使用Gson将嵌套的json数据解析为Java对象,并使用自定义的toString()将其打印出来。 Json内容 POJO类:示例 POJO类:JsonFormatter 我的POJO还有其他类,我试图将其解析为Gson的方式是: 但是当我试图打印出它的子值时,比如 我得到了错误: 我想实现的是将上面的json内容打印成这样: 谁能帮我解决这个问题吗?提前谢谢!

  • 问题内容: 我必须与API进行交互,并且响应格式(根据我的阅读)似乎结构不良。我发现一个Google 网上论坛在这里回答了一个类似的问题,但是我在实现Response类来处理Gson.fromJson时遇到了麻烦。有没有我想念的例子? 问题答案: JSON对象可以由或Javabean类表示。这是一个使用Javabean的示例。 如下使用它: