如何最有效地解析python中的这些参数?
所以我试图想出一个使用argparse库的策略。如何最有效地解析python中的这些参数?
以下是我想和我的程序接口:
$ 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')
但我怎么可以添加一个可选的参数,说的整数,到一个现有的参数?
意味着用户可以调用在以下方面list命令:
program list
凡列表行动将用默认值调用,或者:
program list 10
凡列表行动将被称为10的参数。
我看到了文档中的子命令选项,但我遇到了问题,我将有一个列表参数的子解析器,但是我必须添加一个标志,例如-n,然后提供数字。也许这是一个更好的方法呢?但是我喜欢只提供号码的想法,如果你不想的话,或者省略它。
我试图达到良好的做法吗? argparse可能吗?
这个例子让我错误的方向。我在最后草拟了一个subparser实现,我认为这是个窍门。
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]
其中“名单”,“检查”,“看”是文字字符串,而“整”,“名”,“质量”是变量名。
如果是这样的话,那么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='?')
value
和quality
会得到默认值,如果没有明确给出。默认default
是None
。但是你可以定义一个有意义的选择,例如整数值为default=0
。
你也可以定义诸如解析器:
parser = ...
parser.add_argument('command', choices=['list','check','watch'])
parser.add_argument('rest', nargs='*')
这将预计3“命令”字符串中的一个,并把什么都在“休息”属性(如字符串列表)。然后,您可以根据需要解释这些字符串。
这是完美的谢谢。学到了一些新的东西。 –
你看了[这里](http://*.com/questions/4575747/get-selected-subcommand-with-argparse)呢? –
和[这里](http://*.com/questions/10448200/how-to-parse-multiple-sub-commands-using-python-argparse)。 –
我不认为他想要一次处理多个子分析器。 – hpaulj