【问题标题】:How to use optional argumnets without - or --(dash)如何在没有 - 或 --(破折号) 的情况下使用可选参数
【发布时间】:2019-11-22 12:49:04
【问题描述】:

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

想要达到这样的目标:

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如何使用“sys”模块而不是“argparse”?那么答案是

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

    【讨论】:

    • 你必须定义什么是逻辑和其他东西。使用内置 sys 更容易。
    猜你喜欢
    • 2019-06-09
    • 2012-07-03
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2021-05-06
    • 2019-11-07
    相关资源
    最近更新 更多