我有一个正在尝试改进的 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