-->

红宝石optparse限制(Ruby optparse Limitations)

2019-08-17 17:31发布

我目前在Python脚本,但我想尝试红宝石有几个原因。 我已经看了很多示例代码和阅读了大量文档的过去一周。 关注我的一点是缺乏适当的命令行参数解析库中的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中?

Answer 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>


文章来源: Ruby optparse Limitations