当前位置: 首页 > 面试题库 >

IOError:[Errno 32]管道损坏:Python

公冶泰
2023-03-14
问题内容

我有一个非常简单的Python 3脚本:

f1 = open('a.txt', 'r')
print(f1.readlines())
f2 = open('b.txt', 'r')
print(f2.readlines())
f3 = open('c.txt', 'r')
print(f3.readlines())
f4 = open('d.txt', 'r')
print(f4.readlines())
f1.close()
f2.close()
f3.close()
f4.close()

但它总是说:

IOError: [Errno 32] Broken pipe

我在网上看到了解决此问题的所有复杂方法,但是我直接复制了此代码,因此我认为代码有问题,而不是Python的SIGPIPE。

我正在重定向输出,因此,如果上面的脚本被命名为“ open.py”,那么我要运行的命令将是:

open.py | othercommand

问题答案:

我没有重现这个问题,但是也许这种方法可以解决这个问题:(逐行写入stdout而不是使用print

import sys
with open('a.txt', 'r') as f1:
    for line in f1:
        sys.stdout.write(line)

你能抓住破损的管道吗?这将文件stdout逐行写入,直到关闭管道为止。

import sys, errno
try:
    with open('a.txt', 'r') as f1:
        for line in f1:
            sys.stdout.write(line)
except IOError as e:
    if e.errno == errno.EPIPE:
        # Handle error

您还需要确保othercommand在管道变得太大之前正在从管道读取-https:
//unix.stackexchange.com/questions/11946/how-big-is-the-pipe-
buffer



 类似资料:
  • 问题内容: 我正在使用apache commons http客户端使用post方法来调用url来发布参数,并且很少抛出以下错误。 有人可以建议导致此异常的原因以及如何对其进行调试吗? 问题答案: 原因是: 最通常的是,在另一端已经关闭连接时写入连接; 通常,对等方关闭连接而不读取其末端已经挂起的所有数据。 因此,在两种情况下,你的应用程序协议定义或实施都不充分。 还有第三个原因,我在这里不做记录,

  • 问题内容: 我写了一个简单的套接字程序,它工作正常,但是我的朋友使用端口扫描工具,当它扫描到我正在使用的端口时,它会收到“ java.net.SocketException:Broken pipe”错误,发生了什么?以及如何解决? 控制台的详细信息错误: 问题答案: 某些端口扫描程序通过开始打开连接然后立即终止连接来工作。您的服务器未编程为处理连接失败,因为您没有为此编写代码。您将需要使用try

  • 问题内容: 我在Nginx后面的远程服务器上有django 1.3。 如果我用apache + mod_wsgi运行django,我可以在apache日志文件中观察错误。可以,但我想在控制台中使用。 如果运行django自己的开发服务器,则仅当DEBUG = False时,控制台中的stacktrace才会出现错误。在调试模式下,控制台输出 我想弄清楚为什么?django为什么只输出未命名的Exc

  • 问题内容: 感谢以下有用的建议: 所以当我似乎固定 将命令分成对Popen的单独调用 stderr = subprocess.PIPE作为每个Popen链的参数。 新代码: 原始帖子: 我花了很长时间尝试解决通过简单的subprocess.Popen传递问题。 码: 输出文件的长度约为1000行: 文件长度大于241行的输出: 文件长度小于241行的输出很好。 我一直在疯狂地阅读文档并进行谷歌搜索

  • 问题内容: 我的存储库每5分钟就会收到一次轮询。 但是我发现,如果jenkinsfile被完全破坏,则管道将失败,并显示“此阶段没有步骤”。 然后每5分钟它将重试一次并保持失败。 我该如何防范呢?我可以在某个地方设置阈值,以便这种情况不会永远消失吗? 问题答案: 如果使用的是scm轮询,则只有在发生更改时才应构建。听起来您可能正在按计划进行计划。这是声明性管道中每种语法的不同。 或者您可以做的是从

  • 问题内容: 有些人认为这样做存在一些缺陷,即使正确使用也无法保护您的查询。 带一些化石的物品作为证明。 因此,问题是:mysql [i] _real escape_string()完全不可接受吗? 还是仍然可以使用此功能来创建自己的预备语句? 请提供校对码。 问题答案: 从MySQL的C API函数描述 : 如果需要更改连接的字符集,则应使用函数而不是执行(或)语句。的工作方式类似,但也会影响所使