2014-04-02 111 views
0

我有一個需要在Windows CMD.EXE的一些測試來運行一個python腳本的適當方式,它有三個選項可供選擇存儲python腳本配置

Config中

配置乙

配置ç

因此,用戶可以通過運行xx.py configA來選擇不同的配置,腳本將使用配置A作爲選項,直到用戶指定另一個配置。

由於某些原因,我的程序不使用for循環,以保持配置的狀態的軌道,因此我有三個選項可供選擇根據我的研究

  1. 刪除一個文件,該文件的用途但BC不和類似的處理與B和C(配置A,B和C將使用差可執行文件以運行相同的東西)

示例代碼這樣完成的:

if os.environ.get('xx'): 
    path_a = os.path.join('xx','xx.dll') 
    if os.path.isfile(path_a): 
     os.remove(path_a) 

2.另一個想法是使用本地文件通過檢查文本文件中的特定文本來跟蹤配置,並決定選擇哪個可執行文件

3.第三個想法是爲此創建一個註冊表項腳本並保持跟蹤

我的問題是我應該用哪種方式,並且是其他更好的方式,我可以達到相同的結果。

回答

1

從我能理解你的要求如下:

什麼是我的Python腳本來處理與指向配置設置運行過程中使用三種不同的參數運行一個最好的方式。

如果是這樣,那麼我認爲你應該考慮xml.etree作爲一個選項來存儲和訪問配置文件中的配置數據。您應該只需要1個配置文件,因爲您可以針對每個配置選項使用具有配置設置的不同節點作爲子節點。

您可以將您的配置保存在此格式的文件中;

<configroot> 
    <configsettings1> 
     <option1>foo</option1> 
     <option2>bar</option2> 
    </configsettings1> 
    <configsettings2> 
     <option1>foo</option1> 
     <option2>foo</option2> 

等等。你甚至可以自定義多一點通過增加更多的數據,以每個選項:

<option1 disabled=True> 

<option2 active=1 type='foo'> 

,那麼你可以從提取的節點,取決於與getopt的使用何種ARGS

import getopt 
import xml.etree as et 

INSERTMAINCODEHERE 

if __name__ == '__main__': 
    try: 
     opts, args = getopt.getopt(sys.argv[1:], "f:", ["configoption="]) 


    except getopt.GetoptError, e: 
     print "getopt.GetoptError: %s" % e 
     sys.exit(1) 

    for o, a in opts: 
     if o in ("-f","--configoption="): 
      b=et.ElementTree.parse('configfilename') 
      options=b.getroot().find(a) 
      for s in list(options): 
       print s, s.tag, s.tail, s.attrib #ETC. ETC. 

可以看到有關的細節更多的信息和一些細節here

我希望這是你所問的。如果不是,請讓我知道更多,我會盡力幫助。

+0

這使得配置過程更加複雜一些,通過引入一個xml文件,我可以簡單地使用一個臨時文件來存儲當前配置,然後驗證,使用它與使用臨時文件相比有什麼好處? –

+1

我一直喜歡靜態配置文件,因爲我通常多次運行我的代碼多次。設置xml需要一點時間,但是一旦你保存了設置,就不用擔心再次設置腳本。每次運行它時,您都將擁有最適合您使用它的設置。 – Amazingred

+0

我明白你的觀點,感謝分享這個選項,如果我使用這個選項,我可能需要自動創建xml而不是手動創建,並且每當用戶更改選項時我都會更新配置文件。無論如何,xml似乎是一個很好的選擇 –