是否可以将 运行 python 代码存储在 xml cdata 中?
Is it possible to run python code stored within xml cdata?
我有一个 xml 文件,其中一个标签中包含 python 代码
<codeBlocks><!--The codeBlocks contains specific code for this layer -->
<codeblock name="getXYofFeature2">
<![CDATA[
def fun():
print("in fun")
]]>
</codeblock>
</codeBlocks>
cb = y.codeBlocks.find('codeblock',{'name':'getXYofFeature2'}).text
print(cb)
'\n\t\t\n\t\tdef fun():\n\t\t print("in fun")\n\t\t\n\t\t'
我想 运行 我的 python 脚本中名为 getXYofFeature2 的代码位。当我尝试 运行 以下
> exec(cb)
我收到以下错误消息
exec(cb) File "<string>", line 3
> def fun():
> ^ IndentationError: unexpected indent
是否可以将 运行 代码存储在 xml 文件的 CDATA 中?如果是这样,最好的方法是什么?
是的,这是可能的。以下片段输出 "in fun":
import xml.etree.ElementTree as ET
import textwrap
XML = """
<codeBlocks><!--The codeBlocks contains specific code for this layer -->
<codeblock name="getXYofFeature2">
<![CDATA[
def fun():
print("in fun")
fun()
]]>
</codeblock>
</codeBlocks>"""
codeBlocks = ET.fromstring(XML)
cb = codeBlocks.find('codeblock').text
exec(textwrap.dedent(cb))
请注意,已添加 fun()
函数调用,并且 textwrap.dedent()
用于删除前导空格。
您可以使用 exec() 将任何字符串作为 python 代码执行。
只要确保提取的字符串的缩进是正确的即可。
还要确保你给了它所需的上下文(可能是一些全局变量或外部变量)
执行存储在 XML 中的 python 代码是个好主意吗?
这取决于谁创建了 XML。
如果您完全信任将 python 代码放入 XML 的人,那么是的。
或者换句话说。
如果您愿意让可以将 python 代码粘贴到 XML 中的人完全 shell 毫不犹豫地访问您的 python 代码是 运行 的机器,那么没关系。
否则这种方法会产生巨大的安全影响。
请注意源代码也可以被 pickle 存储在数据库中的 shelf 文件或类似文件中。
我有一个 xml 文件,其中一个标签中包含 python 代码
<codeBlocks><!--The codeBlocks contains specific code for this layer -->
<codeblock name="getXYofFeature2">
<![CDATA[
def fun():
print("in fun")
]]>
</codeblock>
</codeBlocks>
cb = y.codeBlocks.find('codeblock',{'name':'getXYofFeature2'}).text
print(cb)
'\n\t\t\n\t\tdef fun():\n\t\t print("in fun")\n\t\t\n\t\t'
我想 运行 我的 python 脚本中名为 getXYofFeature2 的代码位。当我尝试 运行 以下
> exec(cb)
我收到以下错误消息
exec(cb) File "<string>", line 3
> def fun():
> ^ IndentationError: unexpected indent
是否可以将 运行 代码存储在 xml 文件的 CDATA 中?如果是这样,最好的方法是什么?
是的,这是可能的。以下片段输出 "in fun":
import xml.etree.ElementTree as ET
import textwrap
XML = """
<codeBlocks><!--The codeBlocks contains specific code for this layer -->
<codeblock name="getXYofFeature2">
<![CDATA[
def fun():
print("in fun")
fun()
]]>
</codeblock>
</codeBlocks>"""
codeBlocks = ET.fromstring(XML)
cb = codeBlocks.find('codeblock').text
exec(textwrap.dedent(cb))
请注意,已添加 fun()
函数调用,并且 textwrap.dedent()
用于删除前导空格。
您可以使用 exec() 将任何字符串作为 python 代码执行。
只要确保提取的字符串的缩进是正确的即可。
还要确保你给了它所需的上下文(可能是一些全局变量或外部变量)
执行存储在 XML 中的 python 代码是个好主意吗?
这取决于谁创建了 XML。
如果您完全信任将 python 代码放入 XML 的人,那么是的。
或者换句话说。 如果您愿意让可以将 python 代码粘贴到 XML 中的人完全 shell 毫不犹豫地访问您的 python 代码是 运行 的机器,那么没关系。
否则这种方法会产生巨大的安全影响。
请注意源代码也可以被 pickle 存储在数据库中的 shelf 文件或类似文件中。