【问题标题】:Ruby optparse LimitationsRuby optparse 限制
【发布时间】:2013-03-07 10:15:11
【问题描述】:

我目前使用 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
    

    等等。但是,我无法让abc 互斥,除非我对它们的排列进行编码并进行一些错误处理。例如

    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 中的其他库是否可以轻松处理这些约束?

【问题讨论】:

    标签: python ruby command-line-arguments argparse optparse


    【解决方案1】:

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

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

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

    使filename 参数成为必需参数:

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

    【讨论】:

    • 哇。那太疯狂了。史诗。时期。这么长时间我到底在做什么。太棒了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2011-11-22
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多