将解析的 xml 数据作为 python 中的命令执行

Execute parsed xml data as command in 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

有没有更好的方法来完成这个任务?

确实,连接字符串只会产生另一个字符串。将包含python代码的运行字符串作为python表达式,需要使用exec()函数,例如:

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

或者如果您希望表达式为 return 值,您可以使用 eval() 而不是 exec() :

....
else:
    result = eval(ui_application.tag)