使用XML和数组在Python中列出输入
我想用Python和XML来排序一些函数,但我对此感到很困惑。
我给你举个例子,
在一个config.xml文件里,有3个输入选项。
<inputs>
<input1 value='1- Sending Email' />
<input2 value='2- Extracting a Tar File' />
<input3 value='3- Rebooting Server' />
</inputs>
--
所以,我已经把每个函数都写在一个叫“funcs”的文件夹里,使用起来没有问题。
我想要的就是;
1- 列出这些输入选项,并询问我想选择哪个。
2- 我需要用数组来实现这个功能。因为我只想在将来更新XML文件,所以我不会去动那个让Python执行所有函数的主文件。
任何帮助我都会很感激,谢谢。
2 个回答
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
这有点像猜心思,不过我觉得我明白你想要什么了……我创建了一个叫做 inputs.xml
的文件,里面包含了你上面提到的xml内容,然后我读取这个文件,把输入的内容存储在一个叫 inputs
的python字典里。
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
……如果你想查看用户选择了什么,可以用 inputs["input"+input]
来访问……