首页 > 解决方案 > 使用 argparse 时出现“无效选择”错误

问题描述

我正在编写一个 python 脚本,它以以下格式从命令行接收参数:

./myfile subcommand --change --host=myhost --user=whatever

--change在某种程度上是必需的,这意味着目前这是唯一可用的选项,但稍后我将添加其他选项,但最终用户需要在这些选项之间进行选择。

--host是必须的。这不是立场论据。

--user不是必需的,它有一个默认值。这不是立场论据。

我使用下面的代码来创建这个命令,但是 #!/usr/bin/env python

import argparse

parser = argparse.ArgumentParser(description='My example explanation')

subparsers = parser.add_subparsers(dest='action')
subparsers.required = True

subcommand_parser = subparsers.add_parser('subcommand')
subcommand_parser_subparser = subcommand_parser.add_subparsers()
change_subcommand_parser = subcommand_parser_subparser.add_parser('--change')
change_subcommand_parser.add_argument('--host', required=True)
change_subcommand_parser.add_argument('--user', required=False, default='Salam')

print(parser.parse_args())

当我在 CLI 中使用以下命令尝试此代码时: ./myscript something --change --host hello --user arian

我收到以下错误:

usage: myscript subcommand [-h] {--change} ... myscript subcommand: error: invalid choice: 'hello' (choose from '--change')

我的问题是:

  1. 这段代码有什么问题?
  2. 如何让用户键入--user& --host,而不是使用它们作为位置参数?

标签: python

解决方案


推荐阅读