代码之家  ›  专栏  ›  技术社区  ›  Vladimir

使用python读取GAE中的文件

  •  2
  • Vladimir  · 技术社区  · 14 年前

    我创建了一个简单的python项目,它提供了几个页面。我正在使用“webapp”框架和django。我要做的是使用一个模板文件,并加载包含实际页面文本的“内容文件”。

    当我尝试使用os.open读取内容文件时,会出现以下错误: pageContent=os.open(pageurl,'r').read()) oserror:[errno 1]不允许操作:“content_includes/home.inc”错误

    如果我让django模板系统为我读取相同的文件,一切都会正常工作!

    所以问题是我做错了什么,而姜戈不是????使用相同的“pageurl”。

    下面的代码将给出错误,而如果我对第一个页面内容分配进行注释,则一切正常。

    代码:

            pageName = "home";
    
            pageUrl = os.path.join(os.path.normpath('content_includes'), pageName + '.inc')
            pageContent = os.open(pageUrl, 'r').read()
            pageContent=template.render(pageUrl, template_values, debug=True);
    
            template_values = { 'page': pageContent, 
                               'test': "testing my app" 
                               }
    

    错误:

    Traceback (most recent call last):
      File "/opt/apis/google_appengine/google/appengine/ext/webapp/__init__.py", line 511, in __call__
        handler.get(*groups)
      File "/home/odessit/Development/Python/Alpha/main.py", line 19, in get
        pageContent = os.open(pageUrl, 'r').read()
      File "/opt/apis/google_appengine/google/appengine/tools/dev_appserver.py", line 805, in FakeOpen
        raise OSError(errno.EPERM, "Operation not permitted", filename)
    OSError: [Errno 1] Operation not permitted: 'content_includes/home.inc'
    

    App.YAML:

    handlers:
    - url: /javascript
      static_dir: javascript
    
    - url: /images
      static_dir: images
    
    - url: /portfolio
      static_dir: portfolio
    
    - url: /.*
      script: main.py
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Nick Johnson    14 年前

    os.path.normpath() 在“内容包括”上是一个禁止操作的命令,它只删除了双斜杠和其他非规范化。您可能需要建立一个与脚本相关的路径,在这种情况下,您应该做一些类似的事情 os.path.join(os.path.dirname(__file__), 'content_includes', pageName + '.inc') .

        2
  •  0
  •   max    14 年前

    如果您深入挖掘dev-appserver.py源代码和相关文件,您会发现服务器会执行一些具体的检查,以确保您只打开来自应用程序根目录下的文件(实际上,规则看起来更复杂)。

    对于出现问题的文件访问,我从开发服务器中检测到“路径权限检查”代码,以发现我使用的是绝对路径。我们应该做一个补丁来提供更好的错误报告:iirc AppServer不显示有问题的路径,但是它的一个错误版本使得调试变得困难。