加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy CliBuilder,如何识别错误的参数?

发布时间:2020-12-14 16:26:47 所属栏目:大数据 来源:网络整理
导读:我正在学习Groovy CliBuilder,我发现它很棒,除了,我不知道如何识别错误的论点.请考虑以下示例代码: def cli = new CliBuilder()cli.s args: 1,longOpt: 'sdkdir','sdkdir usage info'cli.h args: 0,longOpt: 'help','print usage information'def opt = cli
我正在学习Groovy CliBuilder,我发现它很棒,除了,我不知道如何识别错误的论点.请考虑以下示例代码:

def cli = new CliBuilder()
cli.s args: 1,longOpt: 'sdkdir','sdkdir usage info'
cli.h args: 0,longOpt: 'help','print usage information'
def opt = cli.parse(args)
if (!opt) {
    //how to be in this case? seems I can never reach here
    println "something went wrong,but I don't know what"
} else if (opt.h) {
    cli.usage()
} else (!opt.s) {
    println "missing required option -s,try with --help for more information"
} else {
    //do something
}

如果我用例如-p调用我的脚本,这是一个无效的选项,没有任何反应.同样,如果我在选项后添加参数,也不会检测到它们.

如何检测并发出错误信号?

另外,一个小的不便是在我的例子中-s是必需的参数,所以在理论上,我可以添加required:true,在实践中我不能或者它也需要-h,但我认为测试它if是好的,除非有更好的方法.

我真正的问题是找到不需要的选项和参数.任何帮助表示感谢,谢谢.

更新:感谢@rodion的输入,我想我会很好地解决而不是为了简单而完美.这是我想出的:

#!/usr/bin/groovy
def cli = new CliBuilder(usage: 'cliTest -s sdkdir {projectName}',header: 'Command line parameter parsing test in Groovy')
cli.s longOpt: 'sdkdir',args: 1,'sdkdir usage info,REQUIRED'
cli.h longOpt: 'help','print usage information'
def opt = cli.parse(args)
def errMsg = "Invalid arguments.nusage: ${cli.usage}n" + 
        "Try `cliTest --help' for more information."
if (!opt) {
    //should never happen,since I don't have required parameters in CliBuilder
    println "error processing argumentsn"
} else if (opt.h) {
    cli.usage()
} else if (!opt.s) {
    println errMsg
} else if (opt.arguments().size() != 1) {
    println errMsg
} else {
    println "Creating project ${opt.arguments()[0]},sdkdir ${opt.s.value}" 
}

这个解决方案已经足够好了,但并不完美,因为它不会告诉您哪个参数有误,只是简单地告诉您消息或打印使用信息.以下是一些测试:

$./cliTest 
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -a
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -a -s ../sdkdir
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -s ../sdkdir
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -s ../sdkdir projectName
Creating project projectName,sdkdir ../sdkdir

$./cliTest -s ../sdkdir projectName wrong
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -s ../sdkdir -a  projectName 
Invalid arguments.
usage: cliTest -s sdkdir {projectName}
Try `cliTest --help' for more information.

$./cliTest -s
error: Missing argument for option: s
usage: cliTest -s sdkdir {projectName}
Command line parameter parsing test in Groovy
 -h,--help           print usage information
 -s,--sdkdir <arg>   sdkdir usage info,REQUIRED
error processing arguments

为了我的目的,我感到非常满意,但如果有人知道更好的方式,请告诉我.

另外,我发现当存在required:true选项且缺少参数时,可能会发生!opt情况,但根据我的理解,它永远不会被使用,因为否则无法单独使用帮助选项.

解决方法

这似乎与 this issue有关.显然你可以在解析后检查opt(但如果它是null,那么我猜你没有任何东西).哦,问题显然不是一个臭虫,嗯……很奇怪.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读