【发布时间】:2012-08-26 19:19:56
【问题描述】:
我正在构建一个类似于 Mathwork 的 Simulink 或 Tanner-Spice 的系统,其中用户使用可用的运算符定义函数。然后我需要运行该函数并将响应返回给用户。我正在使用 Javascript 进行 UI 交互。在内部,用户定义函数 (UDF) 被捕获为 JSON 并传递到解析此 JSON 的 Python 服务器。
我的问题是,我现在如何运行这个 UDF?我不担心恶意用户利用这种能力进行黑客攻击,因为我所有的用户都是受信任的。
我认为的一种方法是将 UDF 作为 python 脚本写入磁盘,然后运行 commands.getstatusoutput()。这里的问题是该函数可能需要多个输入,而无法传递这些。
我正在寻找的是能够动态加载新的 python 文件及其函数,并能够调用它们。
找到了一篇解释如何执行此操作的博客文章。我想问题是我没有使用正确的关键字进行搜索。
无论如何,David Janes 的博客 here 解释了如何动态加载 python 脚本。
如果有更好的方法来做我想做的事,我仍然会邀请你们发表评论并提出建议。
谢谢, 尼克
【问题讨论】:
-
UDF 是 Python 可调用的吗?如果是这样,您可以像在this answer 中那样编组/腌制它。
-
感谢您的评论@ezod。我从未使用过 marshal/pickle,基本文档看起来有点复杂。它在我的情况下可能有用,但我必须深入细节来验证它。
-
即使您信任您的用户,但这并不意味着您可以信任输入。如果这样做,您将让它们和您的网站对CSRF 漏洞利用等开放。
标签: python dynamic load user-defined-functions