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

如何正确使用argparse子解析器?

郑锋
2023-03-14
问题内容

我一直在这里和总体上搜索所有子解析器示例的分配,但似乎无法弄清楚这看似简单的事情。

我有两种var类型,其中一种具有约束,所以认为使用subparser是必经之路。例如-t允许“ A”或“ B”。如果用户通过“
A”,则进一步要求他们还指定它是“ a1”还是“ a2”。如果他们只是通过“ B”,那么什么也没有。

我可以这样做,让argparse返回给我什么类型的“ A”,或者只是“ B”吗?

下面的代码似乎可以工作,但是由于某种原因,在低于条件之后传递任何内容时会中断。

例如从Linux终端

>> python test01.py -t A a1 -v 61

错误…

usage: test01.py a1 [-h]
test01.py a1: error: unrecognized arguments: -v

希望这是有道理的。

编码:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')

parser.add_argument("-t",
                    choices = ["A", "B"],
                    dest = "type",
                    required=True,
                    action='store',
                    help="Some help blah blah")

cam_parser = subparsers.add_parser('a1', help='Default')
cam_parser.set_defaults(which='a1')

cam_parser = subparsers.add_parser('a2', help='parse this instead of default')
cam_parser.set_defaults(which='a2')


parser.add_argument("-v",
                    nargs = '+',
                    required=True,
                    dest = "version",
                    type=int,
                    action='store',
                    help="some version help blah blah")

argument = parser.parse_args()

print argument.type
print argument.version

问题答案:

根据第一个 位置 参数的值调用子解析器,因此您的调用看起来像

python test01.py A a1 -v 61

“ A”触发适当的子解析器,该子解析器将被定义为允许使用位置参数和-v选项。

因为argparse不会对参数和选项的出现顺序施加任何限制,并且没有简单的方法来修改解析开始后 可能
出现的参数/选项(某些涉及修改解析器实例的自定义操作的方法可能会起作用),您应该考虑更换-t自身:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='types of A')
parser.add_argument("-v", ...)

a_parser = subparsers.add_parser("A")
b_parser = subparsers.add_parser("B")

a_parser.add_argument("something", choices=['a1', 'a2'])

由于-v是为主解析器定义的,因此必须在指定哪个子解析器用于其余参数的参数 之前 指定。



 类似资料:
  • 问题内容: 我正在从REST服务接收XML文档,该文档将使用SAX进行解析。请参见以下示例,它是从XSD生成的。 设置解析器不是问题。我的主要问题是在实际的处理,方法等,我不知道如何提取我需要的项目,并将其作为他们有些“嵌套”。 例 所述可发生一次或两次,并且可以包含任意数量的其-in了转向有关于一个连接的信息的元素。基本上,我需要与他们的所有连接的列表,和。我必须为每个元素创建一个类吗? 就我所

  • 问题内容: 我正在实现一个命令行程序,其界面如下: 我已经阅读了argparse文档。我可以使用in实现为可选参数。以及using子命令。 从文档看来,我只能有一个子命令。但是如您所见,我必须实现一个或多个子命令。解析此类命令行参数使用的最佳方法是什么? 问题答案: @mgilson对这个问题有很好的答案。但是我自己拆分sys.argv的问题是我丢失了Argparse为用户生成的所有有用的帮助消息

  • 问题内容: 我有以下代码(使用Python 2.7): 现在,我希望能够调用此程序,例如在普通程序或某些子命令后附加: 基本上,我需要声明可选的子解析器。我知道这并不是真正支持的方法,但是有任何解决方法或替代方法吗? 编辑:我得到的错误信息: 问题答案: 根据文档,带有(而不带有)的会自动打印版本号:

  • 2-我在FlatList中实现分页,所以当用户到达数据列表的末尾时,我调用一个函数来增加当前页,并根据当前页更新的情况,再次提取,因为我将to useEffect传递给依赖项数组 所以这里的问题是应该将以前的数据与新数据联系起来,所以我使用方法, 它工作得很好,但有时我收到一个警告,告诉我有一个重复的数据,当我使用扩展时不工作,我得到一个很大的错误,因为Flatlist keyExtractor问

  • 我想从这个HTML中解析数据(CompanyName,Location,jobDescription,...)使用JSoup(java)。我在尝试迭代工作列表时会被卡住 从HTML中提取是我想要迭代并从中提取数据的许多“joblisting”div中的一个。我只是无法处理如何迭代特定的div对象。很抱歉这个问题,但也许有人可以帮助我谁已经知道使用哪一个功能。选择? 文件输入=新文件(“C:/tal

  • 我试图熟悉JavaScript中的函数式编程。我刚读到指针函子是: 具有of函数的对象,可将任何单个值放入其中。 ES2015添加了一个rray.of使数组成为一个指向的仿函数。 我的问题是“单一价值”到底是什么意思? 我想做一个函数/容器(像https://drboolean.gitbooks.io/mostly-adequate-guide/content/ch8.html),它持有给定维度(