gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:02 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com