如何在python中最有效地解析这些参数?

如何在python中最有效地解析这些参数?,python,argparse,Python,Argparse,因此,我尝试使用argparse库提出一种策略 以下是我希望如何与我的程序交互: $ program list [<number>] $ program check <name> $ program watch <name> [<quality>] 但是,如何向现有参数添加可选参数(例如整数) 这意味着用户可以通过以下方式调用list命令: program list 将使用默认值调用列表操作,或: program list 10 其中,将

因此,我尝试使用argparse库提出一种策略

以下是我希望如何与我的程序交互:

$ program list [<number>] 
$ program check <name>
$ program watch <name> [<quality>]
但是,如何向现有参数添加可选参数(例如整数)

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

program list 
将使用默认值调用列表操作,或:

program list 10
其中,将使用参数10调用list操作

我在文档中看到了subcommands选项,但是我遇到了一个问题,我将为列表参数使用一个子解析器,但是我必须添加一个标志,比如-n,然后提供数字。也许这是一种更好的方法?但我喜欢这样的想法:如果你愿意,只提供数字,如果你不愿意,就省略数字


这就是我想要达到的良好实践吗?使用argparse是否可能?

此示例将我引向了错误的方向。我在最后画了一个次parser实现,我认为它能起作用

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”是变量名

如果是这样的话,那么下级检察官可能是最好的选择
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='?')
如果未明确给出任何值,
质量
将获得默认值。默认值
default
None
。但您可以为整数值定义一个有意义的选项,例如
default=0


您还可以定义一个解析器,如:

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

这将需要3个“command”字符串中的一个,并将其他任何字符串放在“rest”属性中(作为字符串列表)。然后,您可以根据需要解释这些字符串

你看过了吗?还有。我认为他不想一次处理多个下级检察官。
parser = ...
parser.add_argument('command', choices=['list','check','watch'])
parser.add_argument('rest', nargs='*')