Вывод входных данных на Python с использованием XML и массива - PullRequest
1 голос
/ 13 октября 2011

Я хочу отсортировать некоторые функции по Python и XML, но я действительно запутался в этом.

Я приведу вам пример,

Есть 3 варианта вводакоторый содержится в файле config.xml.

<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 голосов
/ 13 октября 2011

Кажется, это больше архитектурная проблема, чем проблема 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 голосов
/ 13 октября 2011

Это требует некоторого умственного чтения, но я думаю, что я знаю, что вы ищете ... Я создал файл с именем 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'}
>>>

Теперь предположим, что вы берете ввод от пользователя и сохраняете его как строку в переменной python с именем input ... если вы хотите получить доступ к выбору, выбранному пользователем, используйте inputs["input"+input] ...

...