Ich bin neu in mod_python und Apache, und ich habe Probleme, eine Datei an einen Benutzer nach einer GET-Anfrage zu senden. Ich habe jetzt eine sehr einfache Einrichtung bekam, und hatte gehofft, einfach die Datei öffnen und schreiben Sie es auf die Antwort:Wie öffne und übertrage ich eine Datei auf dem Dateisystem in 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
Aber ich bin immer Fehler, wenn ich open() und sagte, dass die Datei existiert nicht (obwohl ich ein Dutzend Mal überprüft habe, dass es funktioniert). Dies geschieht bei der Verwendung von relativen und absoluten Dateipfaden.
Ich habe zwei Fragen bekam:
- Warum nicht geöffnet ist() Dateien die richtige zu finden?
- Was ist der beste Weg, um eine Datei aus dem Dateisystem zurückgeben? (Ich frage um sicherzustellen, dass ich nicht etwas besseren Weg fehlt mod_python zu verwenden, um eine Datei zurückzukehren.)
Dank
Edit: Nach dem Auffinden dieses Themas: http://www.programmingforums.org/thread12384.html ich, dass offene entdeckt() funktioniert für mich, wenn ich die Datei in ein anderes Verzeichnis außerhalb von zu Hause verschiebe (ich habe Alias von/home/myname/httpdocs gemacht, aber es funktioniert, wenn ich/data verwende). Irgendwelche Ideen, warum das funktioniert?
Edit 2: Ein Teil meiner Debug-Fehler, wie gewünscht:
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'
Ich habe meine Frage aktualisiert, nachdem ich einen Hinweis auf, was los ist. Außerdem habe ich deinen Ratschlag ausprobiert und einige interessante Fakten herausgefunden: mod_python läuft als "www-data" und hat keine "/". –