39 votes

Lire un fichier sur App Engine avec Python?

Est-il possible d'ouvrir un fichier sur GAE juste pour lire son contenu et obtenir la dernière balise modifiée?

Je reçois un fichier IOError: [Errno 13] non accessible: je sais que je ne peux ni supprimer ni mettre à jour, mais j'estime que la lecture devrait être possible. Quelqu'un a-t-il rencontré un problème similaire?

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

54voto

Wooble Points 35620

Vous avez probablement déclaré le fichier statique dans app.yaml. Les fichiers statiques ne sont pas disponibles pour votre application. si vous devez les utiliser en tant que fichiers statiques et les lire en tant que fichiers d'application, vous devez inclure 2 copies dans votre projet (idéalement, utilisez des liens symboliques pour ne pas avoir à conserver une copie réelle.)

12voto

MStodd Points 2806

Vous pouvez lire des fichiers, mais ils se trouvent sur le système de fichiers GAE loufoque de Goooogle, vous devez donc utiliser un chemin relatif. Je viens de fouetter une application rapide avec un fichier main.py et test.txt dans le même dossier. N'oubliez pas le 'e' sur 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()
 

6voto

jonincanada Points 121

+1 pour la nouvelle "application_readable: true" caractéristique. Avant d'utiliser cette nouvelle fonctionnalité, je n'ai couru dans un problème avec GAEs' "loufoque" système de fichiers lors de l'obtention de la PNL Montylingua à l'importation.

Question: Monty utilise open(fichier,'rb') et un pointeur de fichier à file_ptr.read() en octets de fichiers statiques. Ma mise en œuvre travaillé sur mon local, le système windows, mais a échoué lors du déploiement!

Le correctif: Préciser les attendus d'octets à lire file_ptr.lire(4) #4 octets binaires

Semble être quelque chose en rapport avec le 64 bits GAE serveur vouloir lire plus (8 par défaut) octets. De toute façon, a pris un certain temps pour trouver le problème. Montylingua charge maintenant.

2voto

guneysus Points 485

Je suis venu étrange mais solution de travail :) Jinja :)

Pas besoin mais si vous avez besoin de servir votre fichier statique, le service de fichiers statiques ne fonctionne pas pour moi. Peut-être que je manque quelque chose.

 - 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
 

L'avez-vous eu;) J'ai testé et cela a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X