Ruby:配置文件解析器与OptionParser结合

标签 ruby parsing configuration

我有一个使用 OptionParser 的脚本,我想为该程序添加配置文件,该文件将具有 option = value 格式和 # comments。有没有办法让 OptionParser 解析文件或某些类能够使用 OptionParser 规则和配置文件开关?

谢谢。

最佳答案

据我所知,对于您所要求的内容没有内置支持,但这是可以理解的,因为有很多方法可以实现它。我将使用 default_options 哈希 + YAML 配置文件:

default_options = {
  :name => nil,
  :verbose => false,
}

options = default_options
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"
  opts.on("-v", "--verbose", "Run verbosely") do
    options[:verbose] = true
  end
  opts.on("-n", "--name NAME", "Set name") do |name|
    options[:name] = name
  end
  opts.on("-f", "--configfile PATH", String, "Set config file") do |path|
    options.merge!(Hash[YAML::load(open(path)).map { |k, v| [k.to_sym, v] }])
  end
end.parse!
p options

配置 YAML 示例:

# config.yml
verbose: true
name: name_fromconf

这就是结果(覆盖示例):

$ ruby example.rb -f config.yml -n "hello"
{:name=>"hello", :verbose=>true}

关于Ruby:配置文件解析器与OptionParser结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375530/

相关文章:

javascript - 在应用程序启动之前加载json文件并将其保存在全局变量mithrilJs中

ruby - 十六进制字符串到 Ruby 中的 signed int 转换

ruby - Ruby 中是否有允许插值但不允许转义字符的字符串语法?

C#解析文本文件会丢失每个文本文件的第一行

javascript - 解析 JSON 以获取 JavaScript 中对象内数组中的值

docker - 在 master 上运行的 Kubernetes 应用程序 - DaemonSet

sql - 使用 postgres db 进行适当的索引

ruby - 隐藏实例方法的 Ruby 局部变量的行为

regex - 在clojure中读取制表符分隔的文件

java - spring java配置环境变量