python - 如何在没有 - 或 --(破折号)的情况下使用可选的 argumnets
问题描述
我想使用不带-
or的可选参数--
,
想要达到这样的目标:
scriptname install <other options>
scriptname uninstall <other options>
我的代码:
parser = argparse.ArgumentParser()
parser.add_argument("install","INSTALL",action='store_true',help="INSTALL SOMETHING",default="")
parser.add_argument("uninstall","UNINSTALL",action='store_true',help="UNINSTALL SOMETHING",default="")
args = parser.parse_args()
if args.install:
install logic
if args.uninstall:
uninstall logic
得到下面的错误
ValueError: invalid option string 'install': must start with a character '-'
解决方案
'store_true' 动作不接受任何参数 ( nargs=0
)。具有该动作的位置总是正确的。它会拒绝命令行字符串,如“安装”,因为无法识别。
破折号是定义的一部分optional
。它标识用作标志或名称的字符串,而不是值。没有它,您将定义一个positional
,一个由位置而不是标志字符串标识的参数。
所以正常的optionals
定义是:
parser.add_argument("--install",action='store_true',help="INSTALL SOMETHING")
parser.add_argument("--uninstall",action='store_true',help="UNINSTALL SOMETHING")
您可以将它们放在一个相互排斥的组中。store_true
默认值为False
,如果提供了标志,没有任何参数,则属性设置为 True 。
store_true
允许使用位置,但没有意义。位置是必需的,因此您无法获得False
值。
您可以使用选项定义位置:
parser.add_argument('foo', choices=['install', 'uninstall'], help='...')
然后args.foo
将具有这两个字符串值中的一个。
建议使用subparsers
是此选择位置的变体 -action
类型是触发新解析器的特殊类型。
推荐阅读
- hibernate-validator - 将 glassfish 服务器 4.1.1 升级到 glassfish 服务器 5 时出错
- asp.net - SQL 数据库不适用于 ASP.NET Web 表单
- makefile - 直接在目标依赖项中定义“出错时继续”策略
- unity3d - 在 Unity 中行走时获取人的 3D 点坐标
- excel - 在vba Excel环境中打开文件
- delphi - idUdpServer 发送消息给多个
- java - 从文件中读取并将第一个整数存储为字符串,其余的存储为整数
- python - 在保持像素值的同时将 RGB 图像更改为灰度?
- python - 绘制图形时 Networkx 中的内存错误
- python - 如何通过另一个数组内的索引更新ndarray中的值