Выполнить проанализированные данные 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)