2011-10-13 43 views
1

我想用Python和XML對某些類型的函數進行排序,但是我對此非常困惑。使用XML和數組在Python上列出輸入

我給你舉個例子,

有一個包含一個config.xml文件3個輸入選項。

<inputs> 
    <input1 value='1- Sending Email' /> 
    <input2 value='2- Extracting a Tar File' /> 
    <input3 value='3- Rebooting Server' /> 
</inputs> 

-

所以,我已經pythoned一個名爲「funcs中」文件夾中的每個功能和我與他們沒有任何問題。

我想要的只是;

1-列出輸入並要求選擇哪一個。

2-我需要通過數組來完成它。因爲我只想在將來更新XML文件,所以我永遠不會碰到允許python執行每項功能的主文件。

任何幫助都會讓我感激不盡,謝謝。

+0

您試圖提出一個完整的問題,但細節仍不清楚。你現在有什麼編碼問題,你到目前爲止完成了什麼,以完成1和2,高於 –

+0

我要求一個代碼,列出主python文件(當我運行時)新輸入,如果我添加到XML輸入。我還沒有使用任何代碼,因爲我不知道要使用什麼。那就是我所要求的。 – nightrider84

+0

也許你應該創建一個模塊來放入你的所有函數,然後導入它們以供你的主程序使用。因此,在這個模塊中,您還可以包含輸入消息(已經與它們各自的功能相關聯),並根本不需要xml,或者至少在一個文件中定義該關聯。 – heltonbiker

回答

0

這涉及到一點頭腦,但我想我知道你在找什麼......我建立了一個名爲inputs.xml的文件,其中包含上面引用的xml,然後我讀取它並將輸入存儲在python字典稱爲inputs

from xml.etree import ElementTree 

inputs = dict() 
tree = ElementTree.parse('inputs.xml') 
for row in tree.getiterator('inputs'): 
    for elem in row.getchildren(): 
     inputs[elem.tag] = elem.get('value') 

結果...

$ python 
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01) 
[GCC 4.3.4 20090804 (release) 1] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from xml.etree import ElementTree 
>>> 
>>> inputs = dict() 
>>> tree = ElementTree.parse('inputs.xml') 
>>> for row in tree.getiterator('inputs'): 
...  for elem in row.getchildren(): 
...   inputs[elem.tag] = elem.get('value') 
... 
>>> print inputs 
{'input2': '2- Extracting a Tar File', 'input3': '3- Rebooting Server', 'input1': '1- Sending Email'} 
>>> 

現在假設你從用戶接受輸入,並將其存儲在名爲input一個Python變量的字符串...如果你想訪問用戶選擇了什麼選擇特德,使用inputs["input"+input] ...

+0

這非常有幫助,謝謝。我需要一點點信息。 當我想發送郵件時,請輸入1並按回車。接下來會發生什麼? Python將如何知道我輸入的內容? – nightrider84

+0

@ nightrider84,請參閱我的編輯 –

0

這似乎是一個比Python問題更多的架構問題。

如果你有一堆你永遠不想碰的函數,你應該讓每個函數與某個地方的輸入消息相關聯(最可能在函數的相同源代碼中,而不是在xml中)。

例如,您可以將所有功能放在一個文件中並將其作爲模塊導入。

然後,當你運行你的程序時,你創建了一個你想呈現給用戶的函數列表,並按照數字對它們進行排序,並顯示每個函數的輸入消息。模塊的

例子:

def reset(): 
    print "reset all" 

def sendmail(): 
    print "send mail" 

funcs = { 
    "reset":  {"function": reset, "message": "Choose to reset"}, 
    "sendmail": {"function": sendmail, "message": "Choose to email someone"} 
    } 

通過這樣做,你的XML應該只包含funcs字典的鍵。然後,爲了打印該消息,例如,您應該使用funcs['reset']['message']並使用該功能,則應該使用funcs['reset']['function'](args)

它的工作原理,我已經使用了非常相似的東西。

+0

我將加密源,因此我將來無法編輯它們。這就是爲什麼我試圖將它與XML合併。 – nightrider84

+0

好。所以至少考慮在每個函數和它的輸入消息之間有一個強關聯,例如使用字典。 – heltonbiker