python - 使用 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')
我的问题是:
- 这段代码有什么问题?
- 如何让用户键入
--user
&--host
,而不是使用它们作为位置参数?
解决方案
推荐阅读
- google-spreadsheet-api - 更新范围未知的单元格值(Google SpreadSheets API v4)
- phpunit - 覆盖 PHPUnit 中的 PHPT 测试
- azure - Azure 函数 - 报告失败
- plsql - 嵌套表中批量收集的最大限制是多少(我将它用于 1000 万条记录)
- node.js - 使用 Firebase 函数 Node.js 监听 Stripe Webhooks
- javascript - 当我单击 jQuery-UI 对话框中的按钮时,为什么会出现“超出最大调用堆栈大小”和“TypeError”错误?
- ios - 在 UITableViewCell 下添加自定义嵌套 UIView
- c - C如何计算文本文件中唯一城市的数量
- python - 不同模板python中if循环的输出
- android - 数据绑定注释处理器 kapt 警告