ruby - OptParse 中带有 2 个参数的选项

标签 ruby command-line-arguments optparse

我正在尝试做一些看起来像这样的事情:

opt_parser = OptionParser.new do |opt|
    opt.banner = "Test"
    opt.separator ""
    opt.on("-t", "--test arg1 arg2", "Test") do |arg1, arg2|
        puts arg1
        puts arg2
    end
end

问题在于它返回 arg1,但 arg2 返回 nil。如何实现?

最佳答案

为给定选项指定值列表的公认方法是重复该选项(例如 -D 选项为被 java 和 C 编译器接受),例如

my_script.rb --test=arg1 --test=arg2

在某些情况下,您的参数的性质可能使您可以使用分隔符而不会引入歧义(例如 -classpath 选项到 java 或,更清楚的是,ps-o 选项),所以如果 arg1arg2 通常永远不能包含逗号 , 那么你也可以接受例如

my_script.rb --test=arg1,arg2

支持上述两种约定的代码大致如下:

require 'optparse'
...
test_vals = []
...
opt_parser = OptionParser.new do |opt|
    ...
    opt.on("-t", "--test=arg1[,...]", "Test") do |arg|
        test_vals += arg.split(',')
    end
    ...
end

opt_parser.parse!

puts test_vals.join("\n")

然后:

$ my_script.rb --test=arg1 --test=arg2
arg1
arg2

$ my_script.rb --test=arg1,arg2
arg1
arg2

$ my_script.rb --test=arg1 --test=arg2,arg3
arg1
arg2
arg3

关于ruby - OptParse 中带有 2 个参数的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224386/

相关文章:

Java:行 args[0].length 可能吗?

python - 导入的 python 模块覆盖选项解析器

Ruby .count 操作截断输入文件

java - 将命令行参数存储在数组类中

ruby-on-rails - 使用 watir-webdriver 单击文件下载弹出窗口中的按钮

python - 如何在 python 中使用命令行显示特定 uid 或用户名的进程?

ruby - 使用 Ruby 从命令行参数中提取文件名

python - Optparse 回调不使用参数

ruby-on-rails - 如何在 ruby​​ rails 中按列过滤表格

ruby - 遍历给定目录中的所有文件