我想使用不带-
或--
的可选参数,
想达到这样的目的:
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 '-'
答案 0 :(得分:0)
“ 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
类型是触发新解析器的特殊类型。
答案 1 :(得分:0)
使用“ sys”模块代替“ argparse”怎么办?那么答案将是
/page-id?fields=fan_count