0

我试图能够动态运行 python 代码,变量能够传递给代码。在将我的项目添加到谷歌应用引擎环境之前,我能够在我的计算机上执行此操作(因为我可以访问所有文件,但现在,使用谷歌应用引擎,我不能这样做。

我正在努力寻找解决这个问题的方法。它不需要太花哨,只需发送变量并取出 html,以及能够将客户端(关键部分)添加到所使用的任何数据库方法的脚本。

编辑: 好吧,基本上我所说的动态是为了让我可以导入(或者这就是我在测试原型时在 IDLE 中所做的,解决方案可能不会被称为导入)一个 python 脚本,其中存储了库的名称一个变量,以及将要添加的未知数量的变量。我让它在空闲时工作,但现在我需要让它在谷歌应用引擎环境中工作,人们也需要能够上传脚本(这是级联成更多问题的主要问题)

编辑: 当我说我设法让它在我的本地机器上工作时,我的意思是我能够手动将脚本拖放到与我的主脚本相同的目录中。该脚本稍后将在必要时导入并执行脚本。我能够使它与以下代码一起使用:

#calling function
mod = __import__('actions.'+folder+'.'+FILE)
VAR = getattr(getattr(mod, folder), FILE)
response = VAR.Main()
print response

这段代码在我的笔记本电脑和谷歌应用引擎环境中都有效,但是当我尝试向目录添加更多脚本时,事情就会出现问题。在我的笔记本电脑上,我可以通过一种或另一种方式移动文件,因为我可以完全访问文件目录。在 Google App 引擎上,我无法将文件上传到其余 python 脚本的同一目录或子目录。所以基本上,当试图设计一种允许更多代码进入系统的方法时(在我的例子中,添加更多“插件”),问题就出现了。

4

2 回答 2

2

答案是 exec 语句(也称为 exec() 函数)或 eval() 函数。请参阅http://docs.python.org/reference/simple_stmts.html#the-exec-statementhttp://docs.python.org/library/functions.html?highlight=eval#eval。它们可以从字符串执行任意 Python 代码。exec() 运行一个脚本,你会得到副作用;eval() 接受一个表达式并返回它的值。通常,您将输入作为本地命名空间中的变量传递。

于 2012-10-01T01:22:42.113 回答
1

好的,所以我最终所做的是使用数据存储上传所有内容,例如插件的名称、描述、上传者和代码(现在代码只是输入到 textarea 框中)。然后,我没有像以前在我的桌面上运行所有东西时那样导入位于我的代码同一目录下的文件夹中的文件,而是使用这个小魔法将纯文本代码导入到一个模块中:

#Initiating Variables for use by importing functions
module_name = 'mymod'
filename = 'action_file'
source = PossibleMatches[0][1] #the source code from the best matched option

# define module_name somewhere
import types
module = types.ModuleType(module_name)

# 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')

#execute the code in the context of the module
exec code_object in module.__dict__

#Executing the 'Main' Function from the code
return module.Main()
于 2012-10-01T20:04:12.873 回答