Python &引用;无效选择“;使用argparse时出错

Python &引用;无效选择“;使用argparse时出错,python,Python,我正在编写一个python脚本,它以以下格式从命令行接收参数: /myfile子命令--change--host=myhost--user=which --change在某种程度上是必需的,这意味着目前这是唯一可用的选项,但稍后我将添加其他选项,但最终用户需要在这些选项之间进行选择 --需要主机。这不是一个位置参数 --user不是必需的,它有一个默认值。这不是一个位置参数 我正在使用以下代码创建此命令,但是 #!/usr/bin/env python import argparse pars

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

/myfile子命令--change--host=myhost--user=which

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

--需要主机
。这不是一个位置参数

--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 alian

我得到以下错误:

用法:myscript子命令[-h]{--change}。。。
myscript子命令:错误:无效选择:“hello”(从“--change”中选择)

我的问题是:

  • 这个代码怎么了
  • 如何让用户键入
    --user
    &
    --host
    ,而不将其用作位置参数
    子命令名称不能是选项;使用
    change
    ,而不是
    --change
    argparse
    中可能存在错误,但我不确定该错误是否允许您将
    --change
    指定为子命令名,或者在命令行上搜索子命令名称时忽略选项。显然,使用
    change
    而不是
    --change
    进行删除效果很好。还有一个问题:我这里有一个必需的参数:
    host
    。当用户不提供参数名(--host,--user)时,它是否可以将第一个参数作为主机?(使位置非位置)如果需要
    host
    ,我将首先将其作为位置参数<选项上的code>required=True有点反模式。从文档中可以看出:“注意,必需的选项通常被认为是不好的形式,因为用户希望选项是可选的,因此在可能的情况下应该避免使用。”;使用
    change
    ,而不是
    --change
    argparse
    中可能存在错误,但我不确定该错误是否允许您将
    --change
    指定为子命令名,或者在命令行上搜索子命令名称时忽略选项。显然,使用
    change
    而不是
    --change
    进行删除效果很好。还有一个问题:我这里有一个必需的参数:
    host
    。当用户不提供参数名(--host,--user)时,它是否可以将第一个参数作为主机?(使位置非位置)如果需要
    host
    ,我将首先将其作为位置参数<选项上的code>required=True有点反模式。从文档中可以看出:“注意,必需的选项通常被认为是不好的形式,因为用户希望选项是可选的,因此在可能的情况下应该避免使用。”