使用XML和数组在Python中列出输入

1 投票
2 回答
723 浏览
提问于 2025-04-17 04:14

我想用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] 来访问……

撰写回答