2010-08-18 29 views
1

我目前正在Ruby中使用CLI應用程序,我正在使用Trollop(http://trollop.rubyforge.org/)處理cli參數。Ruby CLI應用程序配置/參數管理

我還想實現在〜/ .mycfg和cwd/.mycfg中存儲所需選項的可能性,後者優先。

我試圖實施的行爲是:

如果.mycfg存在於當前的工作目錄,從那裏加載默認選項,否則,如果它在用戶的主目錄,從那裏加載選項存在。

然後我會重寫那些選項,如果它們也作爲參數傳遞。

問題是,配置文件應該在什麼格式?我曾經想過YAML,但是後來如何將Trollop爲參數生成的數組與YAML合併,或者相反。

回答

2

您可以嘗試的一件簡單的事情是在Trollop處理它之前修改ARGV。首先,讀入你的配置文件,並將存儲在那裏的數據轉換成一個等效的命令行選項數組。現在,預先那陣列到ARGV然後集Trollop鬆。這樣,Trollop將解析所有的參數(無論它們來自配置文件還是來自CLI)。由於您的配置文件參數現在在CLI參數之前列出,因此任何CLI選項都會覆蓋匹配的配置文件選項(因爲後面的選項將覆蓋較早的選項)。

您的配置文件可以使用任何格式,但有時最簡單的形式可能是最簡單的。嘗試使用純文本格式,其中配置文件內容只是您想要傳遞給腳本的確切參數。也就是說,該文件的內容是這樣寫入的:

your_script.rb `cat optionsfile` -more -CLI -options 

將按預期工作。以這種格式存儲選項使得它們易於編輯並且易於處理。只需在文件中閱讀(應該是單行),然後致電String.split(' ')將選項拆分爲一個數組,就像從ARGV來的那樣。一個變體是每行有一個CLI參數的多行配置文件。在這種情況下,您可以使用類似於File.each_line(configfile) {|x| options_array << x}之類的方法一次構建一行選項。

+0

完美。還沒有想過修改ARGV這樣一個簡單的解決方案。謝謝! – 2010-08-18 21:53:01