如何在没有 - 或 --(破折号)的情况下使用可选参数

How to use optional argumnets without - or --(dash)

我想使用不带 ---

的可选参数

想要实现这样的目标:

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)。该动作的位置始终为真。它将拒绝像 'install' 这样无法识别的命令行字符串。


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

使用 "sys" 模块而不是 "argparse" 怎么样?那么答案就是

import sys
if sys.argv[1] == "install":
    install logic
elif sys.argv[2] == "uninstall":
    uninstall logic
else:
    exit