【发布时间】:2020-03-16 09:29:38
【问题描述】:
我有一个正在尝试改进的 CLI。我想做的是有一个带有 3 个选项的可选参数,根据您的选择,您需要为该选项输入某些参数。
例如:
--create dog DOG_NAME DOG_BREED
OR
--create cat CAT_NAME
OR
--create fish FISH_BREED FISH_TANK
等等
所以这看起来有点像:
parser.add_argument("--create", help="Create an animal", choices=["dog", "cat", "fish"])
但是我如何为每个选项设置不同的必需参数?我必须使用子解析器吗?
编辑:使用稍微不同的架构并让它工作。
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(title="actions", dest="subcmd")
subp_create = subparsers.add_parser("create", description="Create a Dog, Cat, or Fish")
subp_delete = subparsers.add_parser("delete", description="Delete a Dog, Cat, or Fish")
subp_create.add_argument("--dog", help="Create a Dog", nargs=2, metavar=(DOG_NAME, DOG_BREED))
#etc.
args = parser.parse_args()
handle_args(args)
def handle_args(args):
if args.subcmd == "create":
if args.dog:
dog_name = args.dog[0]
dog_breed = args.dog[1]
#Do whatever you need
【问题讨论】:
-
类似但不完全一样。如果我将其应用于上面的示例,我需要所有可能参数的位置参数,即
parser.add_argument("dog_name")no? -
是的,subparser 是要走的路。 subparsers 参数实际上是一个带有“选择”的位置(不是像你那样标记的参数),并且对于每个选择,一个解析器都有自己的一组参数(是否需要)。
-
如果你坚持使用'--create',你需要在解析后测试其他参数。
标签: python argparse subparsers