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,那么我猜你没有任何东西).哦,问题显然不是一个臭虫,嗯……很奇怪.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |