错误:[Errno 32] 管道损坏

Posted

技术标签:

【中文标题】错误:[Errno 32] 管道损坏【英文标题】:error: [Errno 32] Broken pipe 【发布时间】:2014-04-28 21:48:49 【问题描述】:

我正在做一个 Django 项目。一切都很顺利,直到我创建了一个 Ajax 请求以将值从 html 页面发送到后端 (views.py)。

当我使用 Ajax 发送数据时,我能够查看传递给 views.py 的值,它甚至到达了 render_to_response 方法并显示了我的页面,但在终端中抛出了损坏的管道错误。我没有看到程序有任何中断,但我想知道是否有办法防止此错误发生。我检查了其他回复。但到目前为止还没有运气。

当我尝试在刷新的页面上再次点击提交时,我收到以下消息:

您要查找的页面使用了您输入的信息。返回该页面可能会导致您重复执行的任何操作。你想继续吗? [提交] [取消]`

这里是转储:

    Traceback (most recent call last):
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 34812)
----------------------------------------
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 284, in run
    self.finish_response()
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 324, in finish_response
    self.write(data)
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 403, in write
    self.send_headers()
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 467, in send_headers
    self.send_preamble()
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 385, in send_preamble
    'Date: %s\r\n' % http_date()
  File "/usr/lib/python2.7/socket.py", line 324, in write
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 570, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

更新: 这是我发送的代码:

    $( document ).ready(function() 
$.csrftoken();
$("#submitdata").click(function()
    //values = [tmode, fmode, t_cool, t_heat, hold];
    values = 
    "tmode": tmode,
    "fmode": fmode,
    "t_cool": t_cool,
    "t_heat": t_heat,
    "hold": hold
    ;
    var jsonText = JSON.stringify(values);
    $.ajax(
        url: "/submitdata/",
        type: 'POST',
        data: jsonText,
        dataType: 'json',
        success:function(data)
            console.log(data.success);
        ,
        complete:function()
            console.log('complete');
        ,
        error:function (xhr, textStatus, thrownError)
            console.log(thrownError);
            console.log(obj);
        
    );       
);
);

这是我的views.py:

@login_required
def submitvalues(request):
    #context = RequestContext(request)
    if request.POST:
        jsonvalues = json.loads(request.raw_post_data)
        print jsonvalues
        return HttpResponse(json.dumps(dict(status='updated')), mimetype="application/json")

我仍然面临同样的问题。有人可以帮我解决这个问题吗?

2014 年 5 月 28 日编辑: 我刚刚弄清楚了断管的原因。这是因为我没有从 Python 发回响应,只是希望页面自动刷新。我是所有这一切的新手,我花了一段时间才弄清楚为什么会这样。

【问题讨论】:

【参考方案1】:

我已经通过添加这个解决了这个问题:

self.send_header("Access-Control-Allow-Origin", "*")

因为我在发送帖子请求页面时发现了一些错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is there

然后我得到了这个解决方案并解决了上述问题。

【讨论】:

【参考方案2】:

您还没有发布任何代码,但这可能是因为您在提交按钮时触发了 Ajax 请求,但没有阻止默认操作。所以发出了ajax请求,但是到了返回数据的时候,浏览器反正已经请求了下一页,所以什么都没有接收到。

【讨论】:

补充...所以ajax没有什么可以接收的

以上是关于错误:[Errno 32] 管道损坏的主要内容,如果未能解决你的问题,请参考以下文章

使用 mysql 和烧瓶登录的 Flask-sqlalchemy 损坏管道错误 32

Win32 匿名管道在第一次读取后损坏

如何修复Git中的'packet_write_wait:连接到...管道损坏'错误

在 Python 2 和 Python 3 中捕获断管

带有 PHP 的 APNS 显示 SSL 损坏的管道错误

尝试通过运行 Tkinter 的发送进程在进程之间通过管道发送任何内容时出现管道损坏错误