如何在不使用-或-(破折号)的情况下使用可选的argumnets

时间:2019-07-12 18:22:07

标签: python python-3.x arguments python-2.x argparse

我想使用不带---的可选参数,

想达到这样的目的:

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 '-'

2 个答案:

答案 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