Python &引用;无效选择“;使用argparse时出错
我正在编写一个python脚本,它以以下格式从命令行接收参数:Python &引用;无效选择“;使用argparse时出错,python,Python,我正在编写一个python脚本,它以以下格式从命令行接收参数: /myfile子命令--change--host=myhost--user=which --change在某种程度上是必需的,这意味着目前这是唯一可用的选项,但稍后我将添加其他选项,但最终用户需要在这些选项之间进行选择 --需要主机。这不是一个位置参数 --user不是必需的,它有一个默认值。这不是一个位置参数 我正在使用以下代码创建此命令,但是 #!/usr/bin/env python import argparse pars
/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有点反模式。从文档中可以看出:“注意,必需的选项通常被认为是不好的形式,因为用户希望选项是可选的,因此在可能的情况下应该避免使用。”