使用argparse时出现“无效选择”错误

时间:2019-05-28 20:44:29

标签: python

我正在编写一个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,而不将其用作位置参数?

0 个答案:

没有答案