I've seen this question asked here, but the answers given did not work in my case and was marked duplicate.
python -u
does not work for stdin
in Python 3.sys.stdin = sys.stdin.detach()
throws a ValueError: underlying buffer has been detached
.stdin
inputs and other files being used as stream.FileInput(openhook=hook_nobuf)
and using open(buffering=0)
in the hook.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.
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!")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With