带有两个位置参数的Python argparse

问题描述 投票:0回答:1

我正在尝试使用 python3 argparse 来获得如下所示的 CLI:

python main.py virtual_machine deploy --name "chetan"
python main.py virtual_machine power-on
python main.py image --list

我尝试过类似的方法,但不起作用:

parser = argparse.ArgumentParser(description="VM Services")

subparsers = parser.add_subparsers(help="Subcommands")

parser.add_argument('virtual_machine', nargs=2, action=TwoPositionalAction, help="Virtual machine operations")
args = parser.parse_args()

if args.virtual_machine[1] == "deploy":
    vm_parser = subparsers.add_parser("deploy", help="Virtual machine deploy")
    vm_parser .add_argument("--name", required=False, help="name of the vm")
    vm_parser .set_defaults(func=two_parser_command)

输出:

python3 main.py virtual_machine deploy
usage: main.py [-h] {} ... virtual_machine virtual_machine
main.py: error: invalid choice: 'virtual_machine' (choose from )

需要帮助使用相同的解析器设置 2 或 1 个位置参数,该解析器将调用函数来执行相应的操作

python argparse
1个回答
0
投票

获得嵌套的一种方法是使用子解析器

import argparse

parser = argparse.ArgumentParser("VM Services")
subparsers = parser.add_subparsers(help="Commands")

# virtual_machine
parser_vm = subparsers.add_parser("virtual_machine")
parser_vm_subparsers = parser_vm.add_subparsers()

# virtual_macine / deploy
parser_vm_deploy = parser_vm_subparsers.add_parser("deploy", help="perform deploy")
parser_vm_deploy.add_argument("--name")

# virtual_machine / power_on
parser_vm_power = parser_vm_subparsers.add_parser("power_on", help="perform power on")

# image
parser_image = subparsers.add_parser("image")
parser_image.add_argument("--list")

args = parser.parse_args()
print(args)

© www.soinside.com 2019 - 2024. All rights reserved.