首页 > 解决方案 > 如何在没有 - 或 --(破折号)的情况下使用可选的 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 '-'

标签: pythonpython-3.xargumentspython-2.xargparse

解决方案


'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类型是触发新解析器的特殊类型。


推荐阅读