在本地运行谷歌应用引擎时无法导入subprocess.call

时间:2017-07-22 04:34:39

标签: python google-app-engine subprocess

我开始测试谷歌应用引擎运行我的烧瓶应用程序。我可以使用烧瓶运行直接运行应用程序没有问题。我的app.yaml看起来像这样

runtime: python27
api_version: 1
threadsafe: true

# [START handlers]
handlers:
- url: /static
  static_dir: CameraMeerat/static
- url: /.*
  script: CameraMeerkat.app
# [END handlers]

运行dev_appserver.py时我得到了

  File "C:\Users\Ben\Documents\CameraMeerkat\Frontend\CameraMeerkat\commands.py", line 5, in <module>
from subprocess import call
ImportError: cannot import name call
INFO     2017-07-21 21:26:37,585 module.py:813] default: "GET / HTTP/1.1" 500 -

从我的python shell中我可以运行该命令

from subprocess import call
help(call)
Help on function call in module subprocess:

call(*popenargs, **kwargs)
    Run command with arguments.  Wait for command to complete, then
    return the returncode attribute.

    The arguments are the same as for the Popen constructor.  Example:

    retcode = call(["ls", "-l"])

这里可能会发生什么?子进程不是可以安装或真正搞乱的模块。类似于此处未解答的

ImportError: cannot import name Popen google cloud compute delpoyment error

1 个答案:

答案 0 :(得分:2)

这是GAE标准环境Python沙箱所施加的限制之一。来自The sandbox(强调我的):

  

App Engine应用程序不能:

     
      
  • 写入文件系统。应用程序必须使用Cloud Datastore存储持久数据。允许从文件系统读取,和   随应用程序上传的所有应用程序文件都可用。

  •   
  • 慢慢回应。必须在几秒钟内处理对应用程序的Web请求。需要很长时间才能响应的流程   终止以避免Web服务器过载。

  •   
  • 进行其他类型的系统调用。

  •   

其中一个不允许的系统调用是subprocess.call。开发服务器将引发异常,因为它包含subprocess的修改版本。

如果您的应用需要此类通话,则可能需要切换到灵活的环境。另请参阅Choosing your App Engine environment