我正在编写一个完全不与blender相关的python脚本,我注意到Blender已经实现了我遇到的问题的解决方案。
我正在尝试向程序输入python表达式,目前正在使用eval()
函数。然而,这不是良好的安全措施。有关更多信息,请参阅此question。请注意,我不需要阻止运算符,因此无法使用ast.literal_eval()
。
这里Blender进来。This answer演示了Blender中一个名为驱动程序面板中的脚本化python表达式框的功能。它实现了我想要的python脚本。我下载了blender源来对它进行逆向工程,但它的所有C ++都不是python(即使表达式是使用python语法计算的)。
这是如何实现的?
答案 0 :(得分:1)
Blender正在有效地使用eval()
并且没有尝试使表达式安全(查找沙盒CPython,这不是一件容易的事。)
这就是为什么Blend文件有一个选项可信来源,有关详细信息,请参阅:
http://wiki.blender.org/index.php/Doc:2.6/Manual/Extensions/Python/Security
有关C代码,请参阅BPY_driver_exec
https://developer.blender.org/diffusion/B/browse/master/source/blender/python/intern/bpy_driver.c $ 172