Reading files in GAE using python
我创建了一个简单的python项目,它提供了几个页面。我正在使用"webapp"框架和django。我要做的是使用一个模板文件,并加载包含实际页面文本的"内容文件"。
当我尝试使用os.open读取内容文件时,会出现以下错误:pageContent=os.open(pageURL,'r').read())oserror:[errno 1]不允许操作:"content_includes/home.inc"错误
如果我让django模板系统为我读取相同的文件,一切都会正常工作!
所以问题是我做错了什么,而姜戈不是????使用相同的"pageurl"。
下面的代码将给出错误,而如果我对第一个页面内容分配进行注释,则一切正常。
代码:
1 2 3 4 5 6 7 8 9 | 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" } |
错误:
1 2 3 4 5 6 7 8 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 | handlers: - url: /javascript static_dir: javascript - url: /images static_dir: images - url: /portfolio static_dir: portfolio - url: /.* script: main.py |
"content-includes"上的
如果你在dev-appserver.py源代码和相关文件中挖掘,你会发现服务器会做一些具体的检查,以确保你只打开来自应用程序根目录下的文件(事实上,规则看起来更复杂)。
对于出现问题的文件访问,我从开发服务器中检测到"路径权限检查"代码,以发现我使用的是绝对路径。我们应该做一个补丁来提供更好的错误报告:iirc AppServer不显示有问题的路径,但是它的一个错误版本使得调试变得困难。