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

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

概述我正在学习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 我正在学习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/groovydef 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 arguments\n"} 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 -aInvalID arguments.usage: cliTest -s sdkdir {projectname}Try `cliTest --help' for more information.$./cliTest -a -s ../sdkdirInvalID arguments.usage: cliTest -s sdkdir {projectname}Try `cliTest --help' for more information.$./cliTest -s ../sdkdirInvalID arguments.usage: cliTest -s sdkdir {projectname}Try `cliTest --help' for more information.$./cliTest -s ../sdkdir projectnameCreating project projectname,sdkdir ../sdkdir$./cliTest -s ../sdkdir projectname wrongInvalID 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 -serror: Missing argument for option: susage: cliTest -s sdkdir {projectname}Command line parameter parsing test in Groovy -h,--help           print usage information -s,--sdkdir <arg>   sdkdir usage info,requirederror processing arguments

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

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

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

以上是内存溢出为你收集整理的Groovy CliBuilder,如何识别错误的参数?全部内容,希望文章能够帮你解决Groovy CliBuilder,如何识别错误的参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存