python - 如何在 mod_python 中打开和传输文件系统上的文件?

标签 python file-io mod-python

我是 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'

最佳答案

要调试这种东西,您需要从正在运行的 mod_python 实例中收集所有信息。

不要搞乱“检查它 [存在] 十几次”。有些假设是不正确的。

做这样的事情来获得一些调试信息。

def handler(req):
    req.content_type = 'text/plain'
    req.write(os.environ)
    req.write(os.getcwd())
    # etc.
    return apache.OK

编辑

现在您可以瞥见重要的东西。在这种情况下,它可能是权限——您需要使用 os.filestat 来确定。 Apache 以几乎没有可用权限的用户身份运行 mod_python。 Apache 也不喜欢链接,但这不应该影响 mod_python。如果您的文件没有被所有人阅读并且不在正确的目录中,您就会遇到问题。

您可能想切换到 mod_wsgi .

关于python - 如何在 mod_python 中打开和传输文件系统上的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795837/

相关文章:

python - Pillow 中的图像旋转

Python:使用图像文件发布请求

java - 我想使用java SE7中的java SE6来使用这段代码

javascript - python 列表到 javascript 数组

mod-python - apxs :Error: Command failed with rc=65536

python - getent 主机采用前 3 位数字+主机名 unix

java - FileInputStream 在 .close() NPE 上崩溃

java - 在android中的单词列表文本文件中搜索单词

centos - 未找到 FreeSwitch(1.6.20) modules.conf 文件

Python 在 Mac OS X 上安装困惑,无法运行 python