Выполнить проанализированные данные XML в качестве команды в Python

Я пытаюсь написать скрипт автоматизации на python, шаги которого описаны в документе xml. но когда я попытался запустить проанализированные данные xml как команду в python, он обрабатывает проанализированные данные как строку и не выполняет их. Я использую xml.etree.ElementTree для анализа данных из XML.

мой код XML

    <Setting >

        <device.startActivity name="('com.android.settings/.Settings')" />
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <vc.dump name="()" />
        <vc.findViewWithText name="('About phone')">.touch(</vc.findViewWithText>
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <vc.dump name="()" />
        <vc.findViewWithText name="('Android verion')">.getParent().getChildren()[1].getText()</vc.findViewWithText>

    </Setting>

и я использую следующий код для анализа и выполнения.

Settings = ET.ElementTree(file = configration_file_name).getroot()
length = 0
for ui_application in Settings:
        if length == len(Settings) - 2:
            break
        else:
            length +=1
        if ui_application.text != None :
                ui_application.tag+ui_application.attrib['name']+ui_application.text
        elif ui_application.attrib['name'] !=None:
            ui_application.tag + ui_application.attrib['name']
        else:
             ui_application.tag

Есть ли лучший способ решить эту задачу?

1 ответ

Решение

Действительно, объединяющая строка просто приведет к другой строке. Чтобы запустить строку, содержащую коды Python в качестве выражения Python, необходимо использовать exec() функция, например:

....
else:
    exec(ui_application.tag)

или если вы ожидаете, что выражение возвращает значение, вы можете использовать eval() вместо exec():

....
else:
    result = eval(ui_application.tag)
Другие вопросы по тегам