【问题标题】:Dynamically running python code on google app engine在谷歌应用引擎上动态运行python代码
【发布时间】:2012-09-29 19:11:40
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你做过应用引擎教程吗?
  • 是的。我已经让 blob 存储工作,数据存储工作。但是我不知道如何动态运行代码。
  • 好吧,如果您希望人们上传自己的脚本并让它们在应用程序引擎环境中执行,那么这是不可能的 afaik。只有您在部署应用时才能做到这一点。
  • 动态到底是什么意思?

标签: python google-app-engine dynamic


【解决方案1】:

答案是 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() 接受一个表达式并返回它的值。通常,您将输入作为本地命名空间中的变量传递。

【讨论】:

    【解决方案2】:

    好的,所以我最终所做的是使用数据存储上传所有内容,例如插件的名称、描述、上传者和代码(现在代码只是输入到 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()
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2014-01-08
      • 2014-01-10
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多