Python 中的 Broken Pipe 错误2024 年 8 月 29 日 | 阅读 3 分钟 如今,Python 被认为是一种成熟的编程语言,因其简洁易读的语法而广受数据科学家和人工智能(AI)工程师的欢迎。除此之外,该编程语言中模糊的错误信息常常让新程序员在调试时抓耳挠腮。 在接下来的教程中,我们将讨论 [Errno 32] Broken pipe(管道破裂),这是我们在与文件系统交互时经常看到的著名错误消息。我们还将了解其原因,以及避免和修复代码中该错误的方法。 Python 中“[Errno 32] Broken pipe”的原因是什么?"Broken pipe" 通常被认为是一个 IOError(Input/Output Error,输入/输出错误),它发生在 Linux 系统级别。它通常在读写文件时,或者换句话说,在执行文件输入/输出或网络输入/输出(通过套接字)时引发。 对应的 Linux 系统错误是 EPIPE,摘自 GNU libc 错误代码。 宏:int EPIPE "Broken pipe."(管道破裂。)没有进程从管道的另一端读取。所有引发错误代码的库函数还会产生一个 SIGPIPE 信号;如果该信号未被处理或阻塞,它将终止程序。因此,直到程序处理或阻塞了 SIGPIPE,否则永远不会实际显示 EPIPE。 从上面的陈述可以得出结论,发送 SIGPIPE 信号的系统导致了 [Errno 32] Broken pipe 错误,这是 Linux 的一种进程间通信机制。 例如,Linux 系统内部使用另一个名为 SIGINT 的信号。在 Linux 中,命令 Ctrl+C 将发送 SIGINT 信号以结束进程,或者我们可以使用 kill 命令达到相同的效果。 Python 默认不会忽略 SIGPIPE。但是,它会将该信号转换为一个异常,并在每次收到 SIGPIPE 时引发一个错误 - IOError: [Errno 32] Broken pipe。 在 Linux 终端中管道输出结果时发生管道破裂错误每当我们在尝试将 Python 脚本的输出通过管道传递给另一个程序时遇到 [Errno 32] Broken pipe 错误,如下面的示例所示 示例 说明 上面的管道语法将创建一个向上游发送数据的进程和一个下游读取数据的进程。当下游不再需要读取上游数据时,它将向该上游进程发送 SIGPIPE 信号。 下游何时不再需要读取上游数据?让我们用一个例子来理解。示例中的 head 命令只需要读取足够的行来告知上游我们不再需要读取它,然后它将向该上游进程发送 SIGPIPE 信号。 每当上游进程是 Python 程序时,就会发生像 IOError: [Errno 32] Broken pipe 这样的错误。 如何避免管道破裂错误?如果我们不关心正确捕获 SIGPIPE,并且希望快速运行,请将以下代码片段插入到 Python 程序的顶部。 语法 说明 在上面的代码片段中,我们将 SIGPIPE 信号重定向到系统通常忽略的默认 SIG_DFL。 但是,建议参阅 Python 信号库的文档,其中警告不要这样处理 SIGPIPE。 正确捕获 IOError 以避免管道破裂错误由于管道破裂错误是 IOError,我们可以放置一个 try/catch 块来捕获它,如下面的代码片段所示。 语法 说明 在上面的代码片段中,我们导入了 sys 和 errno 模块,并放置了一个 try/catch 块来捕获引发的异常并对其进行处理。 多进程程序中管道破裂错误的可能解决方案在利用工作进程来加快处理速度和利用多核 CPU 的程序中,我们可以尝试减少工作进程的数量,以检查错误是否仍然存在。 大量的工作进程在尝试控制系统资源或写入磁盘的权限时可能会相互冲突。 下一主题Python 创建对象的代码模板 |
? 二进制是基数 2 数字系统,这意味着它只使用两个数字 - 0 和 1。另一方面,十进制是基数 10 数字系统,这意味着它使用十个数字 - 0 到 9。要在 Python 中将二进制数转换为十进制,我们...
阅读 3 分钟
大多数程序不是通过执行一系列简单的语句来运行的。代码的编写是为了允许根据变量值的变化做出选择并遵循程序中的多条路径。所有编程语言都包含一组预先包含的控制结构,它们使...
5 分钟阅读
条形图是可视化和比较不同类别数据的一种流行方式。当处理多个数据系列共同构成一个整体时,堆叠条形图提供了一个引人注目的解决方案。PyGal 是一个用于创建交互式图表的多功能 Python 库,它允许您创建堆叠条形图...
阅读9分钟
在本教程中,我们将讨论 Python 装饰器的一个高级概念。我们假设您对 Python 装饰器有基本的了解。如果没有,您可以从 Python 装饰器教程中学习。什么是记忆化?在学习记忆化之前,让我们简要了解一下...
阅读 2 分钟
简介:在本文中,我们将讨论 Deepchecks:测试机器学习模型 (Python)。一个成功且可靠的学习系统版本必须通过各个程度的成熟。它从记录系列和整理、准确分割事实以及正确地对版本进行教学、测试和验证开始...
阅读 6 分钟
PYTHON 网络项目 网络项目是提升学生和专业人士在此竞争环境中的形象的绝佳途径。我们的管理层以高度的动力启动,旨在以最专业的方式帮助学生完成他们的学业任务。我们专注于超现代...
阅读 4 分钟
在本文中,您将学习如何将给定数字转换为单词。有多种方法可以帮助将给定数字转换为单词。方法 1:一种方法如下:def convert_to_words(num): if num == 0: ...
7 分钟阅读
本教程将展示如何利用Python机器学习模型,使用Sklearn的预测函数来预测结果。我们将简要总结该函数的功能,回顾其语法,然后提供使用此方法与各种机器学习模型的示例。简要概述...
5 分钟阅读
在本教程中,我们将编写 Python 代码来展平给定的链表。给定的链表由每个节点表示一个链表,并包含其类型的两个指针。第一个指针表示指向节点的指针,并且...
阅读 6 分钟
Bokeh 是 Python 的一个库,用于通过绘制图形和图表进行数据可视化。输出可以在不同平台上获得,例如 Notebook、HTML、JavaScript 和浏览器。Figure 类用于在图表上创建新图形,并且...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India