gpt4 book ai didi

python - 我怎样才能最有效地在 python 中解析这些参数?

转载 作者:行者123 更新时间:2023-11-28 17:36:38 25 4
gpt4 key购买 nike

所以我正在尝试使用 argparse 库想出一个策略。

下面是我想如何与我的程序交互:

$ program list [<number>] 
$ program check <name>
$ program watch <name> [<quality>]

现在我有一个像下面这样的参数解析器:

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('list')
group.add_argument('check')
group.add_argument('watch')

但是我如何向现有参数添加一个可选参数,比如一个整数?

意味着用户可以通过以下方式调用列表命令:

program list 

使用默认值调用列表操作的地方,或者:

program list 10

将使用参数 10 调用列表操作的位置。

我在文档中看到了 subcommands 选项,但我遇到了一个问题,我有一个用于列表参数的子解析器,但我必须添加一个标志,例如 -n,然后提供数字。也许这是更好的方法?但我喜欢这样的想法,如果您愿意,可以只提供号码,如果不需要,则可以省略。

我正在努力实现良好的实践吗? argparse 有可能吗?

最佳答案

这个示例让我误入歧途。我在最后勾画了一个子解析器实现,我认为它可以解决问题。

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('list')
group.add_argument('check')
group.add_argument('watch')

它需要 3 个字符串,并将它们分配给 3 个属性。

但是,您不能将 3 个“位置”参数放在一个互斥的组中。一个可选的位置(是的,这个术语令人困惑)可以在这样的一组中,但其余的必须是“可选的”(标记的)。


回到您的初始列表。这些不同的模式你愿意接受吗

program list [integer]
program check name
program watch name [quality]

其中 'list'、'check'、'watch' 是文字字符串,而 'integer'、'name'、'quality' 是变量名。

如果是这样的话,那么 subparsers 可能是最好的选择。 nargs='?' 可用于使位置参数成为“可选”。

parser = argparse.ArgumentParser()
sp = parser.add_subparsers(dest='cmd') # put the command string in `cmd` attribute
p1 = sp.add_parser('list')
p2 = sp.add_parser('check')
p3 = sp.add_parser('watch')
p1.add_argument('value',dtype=int, nargs='?') # ok with 0 or 1 values
p2.add_argument('name')
p3.add_argument('name')
p3.add_argument('quality',nargs='?')
如果没有明确给出,

valuequality 将获得默认值。默认的 defaultNone。但是您可以定义一个有意义的替代方案,例如default=0 为整数值。


你也可以像这样定义一个解析器:

parser = ...
parser.add_argument('command', choices=['list','check','watch'])
parser.add_argument('rest', nargs='*')

这将需要 3 个“命令”字符串之一,并将任何其他内容放入“rest”属性(作为字符串列表)。然后您可以根据需要解释这些字符串。

关于python - 我怎样才能最有效地在 python 中解析这些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com