I have a very simple Python 3 script:
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()
But it always says:
IOError: [Errno 32] Broken pipe
I saw on the internet all the complicated ways to fix this, but I copied this code directly, so I think that there is something wrong with the code and not Python’s SIGPIPE.
I am redirecting the output, so if the above script was named “open.py”, then my command to run would be:
open.py | othercommand
I haven’t reproduced the issue, but perhaps this method would solve it: (writing line by line to
stdoutrather than usingprint)You could catch the broken pipe? This writes the file to
stdoutline by line until the pipe is closed.You also need to make sure that
othercommandis reading from the pipe before it gets too big – https://unix.stackexchange.com/questions/11946/how-big-is-the-pipe-buffer