【问题标题】:How to support help command-line argument with required arguments in CliBuilder如何在 CliBuilder 中使用所需参数支持帮助命令行参数
【发布时间】:2014-03-09 23:15:55
【问题描述】:

我正在使用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) 行时会生成下面的输出,并且会自动停止脚本执行:

错误:缺少必需的选项:r 用途:测试 -h,--help 打印此消息 -r,--required 必需参数。

我想只显示指定 -h 或 --help 参数时的用法,而不必删除我所需参数的 required:true 选项。这可能吗?

【问题讨论】:

    标签: groovy command-line-arguments


    【解决方案1】:

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

    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() 方法),并且脚本退出而不转到下一行。
    • 那么在这种情况下,您可以即兴创作答案中更新的逻辑。 @Laf
    • 我曾希望无需手动检查帮助参数就可以逃脱。 intersect 部分不起作用。如果我理解正确,['h', '--help'] 是一个列表,所以它没有intersect 方法(可用于Maps)。
    • intersect 也可用于列表/集合。 :) 它应该工作。您需要使用toList() 将字符串数组args 转换为list。使用我上面更新的注释代码。很高兴这很有帮助。 @Laf
    • @Laf:如果我在原始示例中的def options = cli.parse (args) 行之后添加println 'here',here 仍会在使用消息之后打印,因此脚本似乎不会自动退出。
    猜你喜欢
    • 2011-11-18
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2013-01-13
    相关资源
    最近更新 更多