Groovy 如何在CliBuilder中支持带有必需参数的帮助命令行参数

Groovy 如何在CliBuilder中支持带有必需参数的帮助命令行参数,groovy,command-line-arguments,Groovy,Command Line Arguments,我正在使用CliBuilder解析Groovy脚本的命令行参数。在我定义的论点中,我有一个是强制性的。有没有一种方法可以支持一个-h,--help参数,该参数可以打印命令使用情况,而不会显示关于缺少参数的恼人错误消息 例如,仅使用-h参数运行以下Groovy脚本: def cli = new CliBuilder (usage:'test', stopAtNonOption:false) cli.r (longOpt:'required', required:true, 'Required ar

我正在使用
CliBuilder
解析Groovy脚本的命令行参数。在我定义的论点中,我有一个是强制性的。有没有一种方法可以支持一个
-h,--help
参数,该参数可以打印命令使用情况,而不会显示关于缺少参数的恼人错误消息

例如,仅使用
-h
参数运行以下Groovy脚本:

def cli = new CliBuilder (usage:'test', stopAtNonOption:false)
cli.r (longOpt:'required', required:true, 'Required argument.')
cli.h (longOpt:'help', 'Prints this message')
def options = cli.parse (args)
将在到达
def options=cli.parse(args)
行时生成以下输出,并将自动停止脚本执行:

error: Missing required option: r usage: test -h,--help Prints this message -r,--required Required argument. 错误:缺少必需的选项:r 用法:测试 -h、 --帮助打印此消息 -r、 --必选参数。
我只想在指定了
-h
--help
参数时显示用法,而不必删除我所需参数的
required:true
选项。这有可能吗?

我可能没有正确理解这个问题,但我确实理解了

cli.usage()
你在找什么

您可以执行以下操作来避免它:

def options

//or ['-h', '--help'].intersect(args?.toList())
if('-h' in args || '--help' in args) {
    cli.usage() 
} else {
    options = cli.parse (args)
}

一点也不:(当我调用
cli.parse
方法时,如果缺少所需的参数,则会自动打印错误消息(以及用法消息)(通过
cli.parse()
方法),脚本退出而不转到下一行。在这种情况下,您可以根据答案中更新的逻辑即兴创作。@LafI曾希望我不必手动检查帮助参数就可以离开。
intersect
部分不起作用。如果我得到的正确,
['h','--help']
是一个列表,因此它没有
intersect
方法(可用于
Map
s)。也可用于列表/集合。:)它应该可以工作。您需要使用
toList()
将字符串数组
args
转换为
list
。使用上面更新的注释代码。很高兴这有帮助@Laf@Laf:如果我在原始示例中的
def options=cli.parse(args)
行之后添加
println'here'
,则在用法消息之后仍会打印
here
,因此脚本似乎不会自动退出。