python从字符串导入代码

bs7*_*280 1 python google-app-engine

我正在使用谷歌应用程序引擎,我试图基本上允许用户上传代码,以后它将由服务器执行.我还必须能够将变量发送到脚本,这就是为什么在我运行桌面上的所有内容时,我动态导入所有内容(因为脚本的名称存储在变量中).但是由于谷歌应用引擎环境中的文件系统,我现在无法做到这一点.

我已经有了数据库设置,因此我可以用纯文本格式获取代码.但现在我想知道是否有任何方法可以导入python脚本,而不是从文件但是从包含python代码的变量.

例如,如果这是纯文本代码,我怎么能让它正确执行:

code = """
def Main(var):
    print "you entered: " + var
"""
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 6

首先,为代码创建一个模块:

# define module_name somewhere
import types
module = types.ModuleType(module_name)
Run Code Online (Sandbox Code Playgroud)

您可能也想要注册该模块:

import sys
sys.modules[module_name] = module
Run Code Online (Sandbox Code Playgroud)

然后编译代码:

# source should the code to execute
# filename should be a pseudo-filename that the code's from
# (it doesn't actually have to exist; it's used for error messages)
code_object = compile(source, filename, 'exec')
Run Code Online (Sandbox Code Playgroud)

然后在模块的上下文中执行代码对象:

exec code_object in module.__dict__
Run Code Online (Sandbox Code Playgroud)

  • 我敢肯定你会发现这是多么危险 - 如果你的应用程序只是简单地执行他们的代码,那么用户可以做任何你可以做的事情.您必须真正信任您的用户.想象一下,如果有人删除您的数据或通过您的资源进行刻录,那么您就会获得一笔巨额账单. (2认同)