我正在使用谷歌应用引擎,我试图基本上允许用户上传代码,以后它将由服务器执行。我还必须能够将变量发送到脚本,这就是为什么在我运行桌面上的所有内容时,我动态导入所有内容(因为脚本的名称存储在变量中)。但是由于谷歌应用引擎环境中的文件系统,我现在无法做到这一点。
我已经有了数据库设置,因此我可以用纯文本格式获取代码。但现在我想知道是否有任何方法可以导入python脚本,而不是从文件但是从包含python代码的变量。
例如,如果这是纯文本代码,我怎么能让它正确执行:
code = """
def Main(var):
print "you entered: " + var
"""
答案 0 :(得分:6)
首先,为代码创建一个模块:
# define module_name somewhere
import types
module = types.ModuleType(module_name)
您可能也想注册该模块:
import sys
sys.modules[module_name] = module
然后编译代码:
# 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')
然后在模块的上下文中执行代码对象:
exec code_object in module.__dict__