以与python2和python3兼容的方式将字节写入标准输出

以与python2和python3兼容的方式将字节写入标准输出,python,python-3.x,binary,stdout,Python,Python 3.x,Binary,Stdout,我想要一个返回文件对象的函数,我可以用它将二进制数据写入标准输出。在python2sys中,stdout就是这样一个对象。在python3中,它是sys.stdout.buffer 检索这样一个对象以使其同时适用于python2和python3解释器的最优雅/首选的方法是什么 检查是否存在sys.stdout.buffer(可能使用inspect模块)的最佳方法是什么?如果存在,则返回它,如果不存在,则假设我们使用的是python2并返回sys.stdout?无需测试,只需使用: 这将检索sys

我想要一个返回文件对象的函数,我可以用它将二进制数据写入标准输出。在python2
sys中,stdout
就是这样一个对象。在python3中,它是
sys.stdout.buffer

检索这样一个对象以使其同时适用于python2和python3解释器的最优雅/首选的方法是什么

检查是否存在
sys.stdout.buffer
(可能使用
inspect
模块)的最佳方法是什么?如果存在,则返回它,如果不存在,则假设我们使用的是python2并返回
sys.stdout

无需测试,只需使用:

这将检索
sys.stdout
上的
.buffer
属性,但是如果它不存在(Python 2),它将返回
sys.stdout
对象本身

Python 2:

>>> import sys
>>> getattr(sys.stdout, 'buffer', sys.stdout)
<open file '<stdout>', mode 'w' at 0x100254150>
导入系统 >>>getattr(sys.stdout,'buffer',sys.stdout) Python 3:

>>> import sys
>>> getattr(sys.stdout, 'buffer', sys.stdout)
<_io.BufferedWriter name='<stdout>'>
导入系统 >>>getattr(sys.stdout,'buffer',sys.stdout) 考虑到在Python2中,
stdout
仍然以文本模式打开,在编写时,换行符仍然转换为
os.linesep
。python3
BufferedWriter
对象不会为您这样做

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