在Kivy应用程序中,我希望能够在Kivy中拥有一个多行文本框, 用户可以在其中键入/编辑python代码。
用户操作后,我希望能够运行该代码,以获取具有已知名称的函数的返回值。当然,在执行此操作时,必须使用沙盒来防止用户访问与应用程序或其运行的设备相关的任何其他内容。
有推荐的方法吗?我遇到了Restricted Python,我想知道这对于Kivy应用程序是否足够,或者是否有其他方法可以更好地适应它。
答案 0 :(得分:1)
由于您已经找到Restricted Python(仅适用于Python 2.7),您可能已经知道exec
和disallow access to filesystem inside exec and eval in Python(这表明真的沙盒python是不可能的 - 你可以做到挑战或帮助防止错误,但你不能防止恶作剧。 RestrictedPython似乎不支持Python 3.x,所以你应该通过电子邮件发送它的开发人员,如果它仍然被维护,因为kivy最终会下降2.7。根据你想要允许的内容,ast.literal_eval
可能是足够的,但它只能访问非常有限的python子集,我怀疑它会有用,也许你的kivy应用程序是一个数学应用程序,用户可以输入算术表达式但超出此范围,可能还不够。