我有一个非常简单的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

Python-3.x相关问答推荐

需要使用regex匹配字符串的帮助,直到最后一次出现开闭括号,开闭括号中的值是可选的

如何验证具有内部json字符串的json字符串?

visual studio代码窗口中未激活虚拟环境11

继承自 Counter 与 dict 的类实例的 Deepcopy

基于Pandas列动态创建分箱,以使观测值数量或计数占总计数的1%.

通过 Pandas 通过用户定义函数重命名数据框列

安装没有 sudo 权限的 python3 和 pip3

根据另一列值对多个数据框列进行分组

运行 pip install -r requirements.txt 时出错

Python - 如何从同一台客户端机器运行多个Flask应用程序

Pytorch 的随机 Select ?

为什么不切换到 Python 3.x?

如何在元素列表中找到最大的数字,可能是非唯一的?

如何使用 d.items() 更改 for 循环中的所有字典键?

try 在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + zoom ,但担心我的方法不是 Pythonic 或不安全

混合全局/参数和名为top的函数的奇怪python行为

如何在 Pandas 中的超 Big Data 框上创建数据透视表

Python 3中星型导入的函数形式是什么

如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python

Beautifulsoup 的单元测试失败