Skip to content Skip to sidebar Skip to footer

Writing Bytes To Standard Output In A Way Compatible With Both, Python2 And Python3

I want a function returning a file object with which I can write binary data to standard output. In python2 sys.stdout is such an object. In python3 it is sys.stdout.buffer. What i

Solution 1:

No need to test, just use getattr():

# retrieve stdout as a binary file objectoutput = getattr(sys.stdout, 'buffer', sys.stdout)

This retrieves the .buffer attribute on sys.stdout, but if it doesn't exist (Python 2) it'll return the sys.stdout object itself instead.

Python 2:

>>> import sys
>>> getattr(sys.stdout, 'buffer', sys.stdout)
<open file '<stdout>', mode 'w' at 0x100254150>

Python 3:

>>>import sys>>>getattr(sys.stdout, 'buffer', sys.stdout)
<_io.BufferedWriter name='<stdout>'>

Take into account that in Python 2, stdout is still opened in text mode, newlines are still translated to os.linesep when writing. The Python 3 BufferedWriter object won't do this for you.

Post a Comment for "Writing Bytes To Standard Output In A Way Compatible With Both, Python2 And Python3"