我是 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() 时出现错误,说该文件不存在(尽管我已经检查了十几次)。使用相对和绝对文件路径时会发生这种情况。
我有两个问题:
- 为什么 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'