Ruby optparse限制

p0l*_*ris 7 ruby python optparse command-line-arguments argparse

我目前使用Python编写脚本但我希望尝试Ruby有几个原因.我查看了很多示例代码,并在上周阅读了大量文档.我所关注的一点是缺乏适当的命令行参数来解析Ruby中的库.Ruby专家,不要生我的气 - 也许我不知道.这就是我在这里的原因.

在Python中,我习惯使用argparse它在我看来简直是完美的(可能是我的需要).不幸的是,OptionParser不允许灵活性和功能argparse.

我现在特别关注以下约束:

  1. 如何制作互斥选项列表?例如,一个名为的程序的非常小的选项列表test.

    usage: test [-h] [-a | -b | -c] [-d] [filename]
    
    Run Code Online (Sandbox Code Playgroud)

    我可以编写一些代码:

    # implement a ----------------------------------------------
    opts.on( "-a", "--alpha",
             "implement alpha") do
        #...
    end
    
    Run Code Online (Sandbox Code Playgroud)

    等等.但后来,我已经没有办法让a,b并c相互排斥的,除非我那些代码的置换,并做一些错误处理.例如

    test -ab #should through an error
    
    Run Code Online (Sandbox Code Playgroud)

    在Python中,我可以通过一种非常简单的方式完成此操作:

    # create an command line argument parser object
    cmd_line_parser = argparse.ArgumentParser()
    
    # create a mutually exclusive group
    cmd_line_group = cmd_line_parser.add_mutually_exclusive_group()
    
    Run Code Online (Sandbox Code Playgroud)
    1. 其次,除非我专门为这种排列编写代码-d,-a否则我无法配对.疯了吧.

    2. 我自己要写[OPTION]清单; 除非直到我对所有可能的输入排列进行黑盒测试并将它们映射到黑盒列表,否则我无法知道我是错还是正确.

    3. 此外,还需要使用特殊代码处理强制参数.

使用optparseRuby中的其他库是否容易处理这些约束?

jfs*_*jfs 11

有docopt库同时具有Python和Ruby实现.该test计划的规范是:

usage: test [-h] [-a | -b | -c] [-d] [<filename>]
Run Code Online (Sandbox Code Playgroud)

A,B,C选项是相互排斥(-ab产生错误),它支持组合的选项:-ad,-da,等.

要使filename参数成为必需参数:

usage: test [-h] [-a | -b | -c] [-d] <filename>
Run Code Online (Sandbox Code Playgroud)