我目前正在开发Ruby中的一个CLI应用程序,我正在使用Trollop (http://trollop.rubyforge.org/)来处理cli参数。
我还希望实现在~/.mycfg和cwd/.mycfg中存储所需选项的可能性,后者优先。
我尝试实现的行为是:
如果当前工作目录中存在.mycfg,则从那里加载默认选项;否则,如果它存在于用户的主目录中,则从那里加载选项。
然后,如果这些选项也作为参数传递,我将覆盖这些选项。
问题是,配置文件应该采用什么格式?我考虑过YAML,但是如何将Trollop为参数生成的数组与YAML合并,或者相反。
发布于 2010-08-19 05:48:18
你可以尝试的一件简单的事情是在ARGV处理它之前修改它。首先,读取您的配置文件,并将存储在其中的数据转换为一个等效的命令行选项数组。现在,将该数组预先设置为ARGV,然后将其设置为松散。这样,Trollop将解析您的所有参数(无论它们来自配置文件还是CLI)。由于配置文件参数现在列在CLI参数之前,因此任何CLI选项都将覆盖匹配的配置文件选项(因为较新的选项会覆盖较早的选项)。
您的配置文件可以是您想使用的任何格式,但有时最简单的格式可能是最简单的。尝试使用纯文本格式,其中的配置文件内容就是您想要传递给脚本的确切参数。也就是说,文件的内容是这样写的,即调用:
your_script.rb `cat optionsfile` -more -CLI -options会像预期的那样工作。以这种格式存储选项使其易于编辑和处理。只需读取文件(应该是一行)并调用String.split(' ')将选项拆分到一个数组中,就像它们从ARGV中出现时一样。一种变化是有一个多行配置文件,每行一个CLI参数。在这种情况下,您可以使用类似于File.each_line(configfile) {|x| options_array << x}的东西一次一行地构建您的选项数组。
https://stackoverflow.com/questions/3516694
复制相似问题