私はOptionParserを利用したスクリプトを持っており、option = value
フォーマットと# comments
を持つプログラムの設定ファイルを追加したいと思います。 OptionParserの解析ファイルを作成する方法や、OptionParserのルールとスイッチを使用して設定ファイルを使用できるクラスがありますか?Ruby:OptionParserと組み合わされた設定ファイルパーサー
ありがとうございます。
私はOptionParserを利用したスクリプトを持っており、option = value
フォーマットと# comments
を持つプログラムの設定ファイルを追加したいと思います。 OptionParserの解析ファイルを作成する方法や、OptionParserのルールとスイッチを使用して設定ファイルを使用できるクラスがありますか?Ruby:OptionParserと組み合わされた設定ファイルパーサー
ありがとうございます。
AFAIKあなたが聞いたことのための組み込みのサポートはありませんが、それを達成するためには非常に多くの方法があるため、理解できます。コンフィグ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
例:私ははdefault_optionsハッシュ+ YAMLの設定ファイルを使用したい
# config.yml
verbose: true
name: name_fromconf
をそして、これは(オーバーライドを持つ例)の結果である:まだ
$ ruby example.rb -f config.yml -n "hello"
{:name=>"hello", :verbose=>true}
Rubyに慣れ親しんだのですが、options.mergeを調整する必要がありました(options.mergeを使用するには!):
options.merge!(Hash[YAML::load(open(path)).map { |k, v| [k.to_sym, v] }])
これは私のために働くためには、これは素晴らしいものですが、間違いなく答えに感謝します。
の場合、それはうまくいきません: – Daniel
xyz.rb --some-option = X --another-one = Y --configfile =/some/file.ymlこれはsome-optionとanotherを上書きしますconfigファイルからのオプション値。 +私はそれらのopts.onブロックで検証がある場合、それは適用されません、オプションのチェックも適用されません(私は設定にいくつかの狂った値を書くことができます)。このアプローチは間違っています。私はすでにそれを試してみました。 – Daniel
@ダニエル、私は一般的な考えを提供しようとしましたが、あなたの特定のニーズに合わせて修正する必要があります。 – tokland