2009-11-28 66 views
1

我正在研究一系列連接到同一服務器並執行相關但不同事情的命令行工具。我希望用戶能夠擁有一個配置文件,以便他們可以放置通用參數,例如可以在所有工具之間共享的連接信息。理想情況下,我喜歡的東西,它爲我以下:在Python中處理(可能)可選參數

  1. 如果在命令行中指定的服務器地址,如果在命令中沒有指定的服務器地址使用,而忽略任何其他值
  2. 但是在命令行中指定的配置文件中使用此地址。忽略任何其他值。
  3. 如果服務器地址未在命令行中指定,或者在命令中指定了配置文件,但在用戶主目錄中的配置文件中可用(例如.myapprc),請使用此值。
  4. 如果服務器地址未在任何上述mechinisms中指定,則會退出並顯示錯誤消息。

我見過這個最接近的是configparse模塊,從我可以告訴提供了一個選項解析器,同時也關注了配置文件,但似乎並沒有有「必須在規定的概念某處「,我需要。

有誰知道,可以覆蓋我上面的用例現有模塊的?如果不是的話,那麼對optparse,configparse或其他一些我還沒有評論的模塊的簡單擴展也將不勝感激。

+0

你想使用什麼類型的配置文件?兩種流行的格式是具有擴展XML和INI的文件。 – 2009-11-28 05:56:47

回答

1

這方模塊configparse被寫入到從標準Python庫擴展optparse。正如我指出的optparse文檔所言,「optparse並不妨礙您實施所需的選項,但也不會爲您提供太多幫助」(儘管它後面有幾個URL指示您執行此操作的方法) 。最簡單的方法就是使用default value功能:指定一個默認值,它實際上並不是一個合法的值(對於類似於服務器地址的東西,這很容易) - 然後,一旦選項被處理,請驗證指定的值是合法的(這是無論如何,這是個好主意!),否則就會引發相應的例外。

0

我已經使用opster的中間件功能和SafeConfigParser一起實現了類似(但稍微簡單)的效果。你必須實現你自己描述的特定邏輯,但它可以幫助你使其相對無痛。 opster中間件使用的一個例子是test/test.py的例子。

0

使用字典將選項存儲到您的程序。

首先分析用戶的目錄選項文件,每個選項存儲在一個字典(configparse或任何其他模塊是歡迎)。然後解析命令行(使用你需要的任何模塊,optparse可能適合),如果參數指定了一個配置文件,解析dict中的指定文件並從你讀的內容更新你的選項(dict.update真的很方便合併2字典)。然後將所有其他參數存儲到另一個字典中,並再次合併它們(再次使用dict.update ...)。

這樣,你確信你保存的選項字典包含或直接從用戶的文件在命令行中讀取,從指定的配置文件,或直接所需的值。如果它不包含所需的值,則退出並顯示錯誤。