Считать файл на Механизме Приложения с Python?

Действительно ли возможно открыть файл на GAE только, чтобы считать его содержание и получить последний измененный тег?

Я получаю IOError: [Errno 13] файл, не доступный: Я знаю, что не могу удалить или обновить, но я полагаю, что чтение должно быть возможным, кто-либо столкнулся с подобной проблемой?

os.stat(f,'r').st_mtim
39
задан Abizern 13 April 2010 в 15:25
поделиться

2 ответа

Вы, вероятно, объявили файл статическим в app.yaml. Статические файлы недоступны для вашего приложения; если вам нужно обслуживать их как статические файлы и читать их как файлы приложений, вам необходимо включить в проект 2 копии (в идеале с использованием символических ссылок, поэтому вам не нужно поддерживать фактическую копию)

Обновление, ноябрь 2014 г .:

Как предлагается в комментариях, теперь вы можете сделать это с помощью флага application_readable:

application_readable

Необязательно. По умолчанию файлы, объявленные в обработчиках статических файлов, выгружаются как статические данные и обслуживаются только конечными пользователями, они не могут быть прочитаны приложением. Если для этого поля установлено значение true, файлы также выгружаются как данные кода, чтобы ваше приложение могло их прочитать. Обе загрузки оплачиваются в соответствии с квотами вашего кода и статического хранилища данных .

См. https://cloud.google.com/appengine/docs/python/config/appconfig#Static_Directory_Handlers

54
ответ дан 27 November 2019 в 02:32
поделиться

Вы можете читать файлы, но они находятся в дурацкой файловой системе Goooogle. поэтому вам нужно использовать относительный путь. Я просто создал быстрое приложение с файлом main.py и test.txt в одной папке. Не забывайте букву "e" в st_mtime.

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()
11
ответ дан 27 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: