Je suis nouveau sur mod_python et Apache, et j'ai du mal à retourner un fichier à un utilisateur après une requête GET. J'ai une configuration très simple en ce moment, et espérais ouvrir simplement le fichier et l'écrire à la réponse:Comment ouvrir et transférer un fichier sur le système de fichiers dans mod_python?
from mod_python import apache
def handler(req):
req.content_type = 'application/octet-stream'
fIn = open('response.bin', 'rb')
req.write(fIn.read())
fIn.close()
return apache.OK
Cependant, je reçois des erreurs lors de l'utilisation ouverte(), en disant que la le fichier n'existe pas (même si j'ai vérifié une douzaine de fois qu'il le fait). Cela se produit lors de l'utilisation de chemins de fichiers relatifs et absolus.
J'ai deux questions:
- Pourquoi n'est pas ouvert() trouver le bon fichiers?
- Quelle est la meilleure façon de retourner un fichier à partir du système de fichiers? (Je demande de faire que je ne manque pas une meilleure façon d'utiliser mod_python pour retourner un fichier.)
Merci
Edit: Après avoir trouvé ce fil: http://www.programmingforums.org/thread12384.html j'ai découvert que open() fonctionne pour moi si je déplace le fichier vers un autre répertoire en dehors de la maison (j'ai été alias hors de/home/myname/httpdocs, mais cela fonctionne si j'utilise/data). Des idées pour lesquelles cela fonctionne?
Edit 2: Une partie de mon erreur de débogage, comme l'a demandé:
MOD_PYTHON ERROR
ProcessId: 13642
Interpreter: '127.0.1.1'
ServerName: '127.0.1.1'
DocumentRoot: '/var/www'
URI: '/test/mptest.py'
Location: None
Directory: '/home/myname/httpdocs/'
Filename: '/home/myname/httpdocs/mptest.py'
PathInfo: ''
Phase: 'PythonHandler'
Handler: 'mptest'
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)
File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1229, in _process_target
result = _execute_target(config, req, object, arg)
File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target
result = object(arg)
File "/home/myname/httpdocs/mptest.py", line 13, in handler
fIn = open('/home/myname/httpdocs/files/response.bin', 'rb')
IOError: [Errno 2] No such file or directory: '/home/myname/httpdocs/files/response.bin'
J'ai mis à jour ma question après avoir trouvé un indice sur ce qui se passe. J'ai aussi essayé votre conseil et découvert quelques faits intéressants: mod_python s'exécute comme "www-data", et n'a plus de "/". –