gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:34:53 27 4
gpt4 key购买 nike

我正在学习 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 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 -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

就我的目的而言,我非常满意,但如果有人知道更好的方法,请告诉我。

此外,我发现当存在 !opt 选项且参数丢失时,可能会发生 required: true 情况,但根据我的理解,它永远无法使用,否则不可能单独提供帮助选项。

最佳答案

这似乎与 this issue 有关。显然你可以在解析后检查 opt (但如果它为空,那么我猜你什么都没有)。哦,问题显然不是错误,嗯......奇怪。

关于Groovy CliBuilder,如何识别错误的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com