8

我目前使用 Python 编写脚本,但出于几个原因我想尝试 Ruby。在上周,我查看了很多示例代码并阅读了很多文档。我担心的一个问题是 Ruby 中缺少适当的命令行参数解析库。Ruby 专家,不要生我的气——也许我不知道。这就是我在这里的原因。

在 Python 中,我习惯于使用argparse它,我认为它简直是完美的(也许适合我的需要)。不幸的是,OptionParser它不允许这样做的灵活性和功能argparse

我现在特别关注以下限制:

  1. 如何制作互斥选项列表?例如,一个名为test.

    usage: test [-h] [-a | -b | -c] [-d] [filename]
    

    我可以编写一些代码,例如:

    # implement a ----------------------------------------------
    opts.on( "-a", "--alpha",
             "implement alpha") do
        #...
    end
    

    等等。a但是,除非我对它们的排列进行编码并进行一些错误处理,否则我无法制作bc互斥。例如

    test -ab #should through an error
    

    在 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()
    
    1. 其次,除非我专门为这种排列编写代码-d,否则我无法配对。-a疯了吧。

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

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

optparse使用Ruby 或其他库是否可以轻松处理这些约束?

4

1 回答 1

11

有一个具有 Python 和 Ruby 实现的docopt库。test程序的规范是:

usage: test [-h] [-a | -b | -c] [-d] [<filename>]

a,b,c 选项是互斥的(-ab产生错误),它支持组合选项:-ad,-da等。

使filename参数强制:

usage: test [-h] [-a | -b | -c] [-d] <filename>
于 2013-03-18T22:34:17.737 回答