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"