Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在App Engine上读取文件?_Python_Google App Engine - Fatal编程技术网

使用Python在App Engine上读取文件?

使用Python在App Engine上读取文件?,python,google-app-engine,Python,Google App Engine,是否可以在GAE上打开一个文件以读取其内容并获取最后修改的标记 我收到一个IOError:[Errno 13]文件无法访问: 我知道我不能删除或更新,但我相信阅读应该是可能的 有没有人遇到过类似的问题 os.stat(f,'r').st_mtim 您可以读取文件,但它们位于Goooogle古怪的GAE文件系统上,所以您必须使用相对路径。我刚刚开发了一个快速应用程序,在同一个文件夹中有main.py文件和test.txt文件。别忘了圣母时间的“e” import os from google.a

是否可以在GAE上打开一个文件以读取其内容并获取最后修改的标记

我收到一个IOError:[Errno 13]文件无法访问: 我知道我不能删除或更新,但我相信阅读应该是可能的 有没有人遇到过类似的问题

os.stat(f,'r').st_mtim

您可以读取文件,但它们位于Goooogle古怪的GAE文件系统上,所以您必须使用相对路径。我刚刚开发了一个快速应用程序,在同一个文件夹中有main.py文件和test.txt文件。别忘了圣母时间的“e”

import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util


class MainHandler(webapp.RequestHandler):

  def get(self):
    path = os.path.join(os.path.split(__file__)[0], 'test.txt')

    self.response.out.write(os.stat(path).st_mtime)


def main():
  application = webapp.WSGIApplication([('/', MainHandler)],
                                       debug=True)
  util.run_wsgi_app(application)


if __name__ == '__main__':
  main()

您可能已经在app.yaml中将该文件声明为静态文件。静态文件对您的应用程序不可用;如果您需要将它们作为静态文件提供,并将它们作为应用程序文件读取,则需要在项目中包含两个副本(理想情况下使用符号链接,这样您就不必维护实际副本)

2014年11月更新:

正如注释中所建议的,现在可以使用应用程序_可读标志执行此操作:

application_readable
可选。默认情况下,静态文件处理程序中声明的文件是 作为静态数据上传,仅提供给最终用户,他们不能 被应用程序读取。如果此字段设置为true,则文件 还作为代码数据上传,以便应用程序可以读取它们。二者都 上载将根据您的代码和静态数据存储资源收费 配额

有关新的“应用程序可读:真”功能,请参见

+1。在使用这项新功能之前,我确实在导入NLP Montylingua时遇到了GAEs“古怪”文件系统的问题。

问题:Monty使用静态文件中的open(filename,'rb')和指向file_ptr.read()的文件指针(以字节为单位)。我的实现在本地windows系统上运行,但在部署时失败

修复方法:指定读取文件_ptr.read(4)#4个二进制字节所需的字节


似乎与64位GAE服务器有关,该服务器希望读取更多(默认为8)字节。无论如何,我花了一段时间才发现这个问题。Montylingua现在开始加载。

我想出了一个奇怪但有效的解决方案:)Jinja:)

直接提供静态文件有时会让GAE头疼。可能的性能折衷让您与Jinja一起向前迈进

- url: /posts/(.*\.(md|mdown|markdown)) 
  mime_type: text/plain
  static_files: static/posts/\1
  upload: posts/(.*\.(md|mdown|markdown))



from jinja2 import Environment
from jinja2.loaders import FileSystemLoader
posts = Environment(loader=FileSystemLoader('static/posts/')) # Note that we use static_files folder defined in app.yaml
post = posts.get_template('2013-11-13.markdown')

import markdown2 # Does not need of course

class Main(webapp2.RequestHandler):

    def get ( self ):
        self.response.headers[ 'Content-Type' ] = 'text/html'

        self.response.write ( markdown2.markdown( post.render()) )  # Jinja + Markdown Render function

你明白了吗我进行了测试,它运行正常。

使用webapp2,假设您的
页面/index.html
路径与
main.py
相同:

#!/usr/bin/env python

import webapp2, os

class MainHandler(webapp2.RequestHandler):
    def get(self):
        path = os.path.join(os.path.split(__file__)[0], 'pages/index.html')
        with open(path, 'r') as f:
            page_content = f.read()
        self.response.write(page_content)

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

当文件没有被标记为静态,而您正试图以模式
'rt'
读取它时,我看不到答案;显然这不管用。您可以但是,在模式下打开文件可以很好地'rb',或者只打开普通的
'r'
。(我在那个“t”上浪费了大约10分钟。)

尝试使用相对目录,确保它在你的应用程序中,而不是根目录。我已经尝试过,当我遇到路径问题时,我得到Other Errno 2A Googler的响应,并告诉我你无法读取标记为静态的文件。但这是我的问题,因为我想打开我的JS/CSS文件。如果我找到SMTH,我会让你知道。请不要交叉发布到组中,因此选择一个,除非你没有得到答案。如果你不将这些文件用作静态文件,你可以读取它们。如果将它们用作静态文件,则可以使用应用程序访问它们。但如果您不这样做,问题可能是文件系统是区分大小写的。除了静态文件不可用外,应用程序的文件访问没有什么异常。我如何在GAE环境中使用符号闪烁?您在本地副本中创建符号链接;这些文件实际上将被复制两次到App Engine:一次到静态文件服务器,一次到应用程序服务器。还可以通过将本地副本链接到应用程序目录而不是将外部包复制到使用它的每个项目中。实际上,现在您可以使用“AppultIsAudioReal:Tress”,考虑更新您的答案,看这看起来不像是如何“用Python读取APP引擎上的文件”的答案。+1在my app.yaml-url:/resources/*static\u dir:resources application\u readable:true中