我有一个使用OptionParser的脚本,我想为程序添加配置文件,该文件将具有option = value
格式和# comments
。有没有办法让OptionParser解析文件或某些类能够使用OptionParser规则和开关来配置文件?
谢谢。
答案 0 :(得分:2)
AFAIK没有内置的支持你所要求的,但这是可以理解的,因为它将有很多方法来实现它。我将使用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}
答案 1 :(得分:2)
仍熟悉ruby,但我不得不调整options.merge(使用options.merge!):
options.merge!(Hash[YAML::load(open(path)).map { |k, v| [k.to_sym, v] }])
让这个对我有用,这是很棒的东西,绝对欣赏答案。