如何在没有 - 或 --(破折号)的情况下使用可选参数
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
我想使用不带 -
或 --
、
想要实现这样的目标:
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