Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试提供文件时发生IOerror_Python_Apache_Mod Wsgi_Web.py - Fatal编程技术网

Python 尝试提供文件时发生IOerror

Python 尝试提供文件时发生IOerror,python,apache,mod-wsgi,web.py,Python,Apache,Mod Wsgi,Web.py,我正在尝试使用web.py框架将处理后的数据文件返回给webapp用户。在本例中,文件名为plate3_v4.gb。我试图返回名为results.gb的文件。这是基于 代码如下: class ServeHandler(): def GET(self): web.header("Content-Disposition", "attachment; filename=%s" %"results.gb") web.header("Content-Type", "

我正在尝试使用web.py框架将处理后的数据文件返回给webapp用户。在本例中,文件名为plate3_v4.gb。我试图返回名为results.gb的文件。这是基于

代码如下:

class ServeHandler():
    def GET(self):
        web.header("Content-Disposition", "attachment; filename=%s" %"results.gb")
        web.header("Content-Type", "gb")
        web.header('Transfer-Encoding','chunked')
        f = open('/usr/local/www/wsgi-scripts/uploads/plate3_v4.gb','rb')
        while 1:
            buf = f.read(1024 * 8)
            if not buf:
                break
            yield buf
当我转到我认为应该为我提供数据的页面时,我得到了

mod_wsgi (pid=21773): Exception occurred processing WSGI script '/usr/local/www/wsgi-scripts/code.py'.
IOError: failed to write data
在我的错误日志中


有什么想法吗?

首先,WSGI应用程序不应该自行设置传输编码响应头。只有底层web服务器才应该这样做。对于mod_wsgi,只要不提供响应内容长度,Apache就应该自动执行该操作


至于错误,它表明客户端在读取返回的所有数据之前关闭了套接字连接。

感谢您提供有关传输编码的信息,但是否确实需要不设置它?如果web.py应用程序用作独立应用程序和mod_wsgi应用程序,会怎么样?(我只是想知道,因为这个问题是基于我在webpy group中发布的代码)不是您的WSGI应用程序将响应内容格式化为所需格式。如果您这样做违反了WSGI规范,那么需要担心的是底层服务器领域。谢谢,那么这个cookbook条目也是不正确的,因为它告诉我们要设置分块标题。正确,这个例子是错误的,如果它运行在一个本身并不支持分块响应内容的web服务器上,那么包含标题会导致客户端失败。如果客户端不支持HTTP/1.1,它也会以任何方式失败。在这种情况下,web服务器会知道客户机不是HTTP/1.1,因此不会使用分块响应,但WSGI应用程序已经覆盖了这一点,并说它会。