我正在尝试使用 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 个位置参数,该解析器将调用函数来执行相应的操作
获得嵌套的一种方法是使用子解析器
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)