Search code examples
pythonreadlinebufferingfile-ioreadlines

How to avoid buffering in the Python fileinput library


I've seen this question asked here, but the answers given did not work in my case and was marked duplicate.

I dug in the source code (/usr/lib/python3.2/fileinput.py) and saw that readlines(bufsize) was being used internally to load a buffer. No shell or other piping shenanigans.


Solution

  • What worked for me was simply setting FileInput(bufsize=1). The file.readlines() documentation does state "The optional size argument, if given, is an approximate bound on the total number of bytes in the lines returned." In practice, I get exactly one new line every time rather than having to fill a buffer.

    with fileinput.input(bufsize=1) as f:
        for line in f:
            print("One line in, one line out!")