mod_python と Apache は初めてで、GET 要求の後でユーザーにファイルを返すのに問題があります。私は今非常に単純な設定をしており、単純にファイルを開いて応答に書き込むことを望んでいました:
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
ただし、open() を使用すると、ファイルが存在しないというエラーが表示されます (ファイルが存在することを何十回も確認したにもかかわらず)。これは、相対および絶対ファイルパスを使用している場合に発生します。
2 つの質問があります。
- open() が正しいファイルを見つけられないのはなぜですか?
- ファイルシステムからファイルを返す最良の方法は何ですか? (mod_python を使用してファイルを返すためのより良い方法を見逃していないことを確認してください。)
ありがとう
編集: このスレッドを見つけた後: http://www.programmingforums.org/thread12384.html ファイルを家の外の別のディレクトリに移動すると、open() が機能することがわかりました (/home/myname からエイリアスを作成していました)。 /httpdocs ですが、/data を使用すると機能します)。それが機能する理由はありますか?
編集 2: 要求に応じて、私のデバッグ エラーの一部:
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'