以与python2和python3兼容的方式将字节写入标准输出
我想要一个返回文件对象的函数,我可以用它将二进制数据写入标准输出。在python2以与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
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
。python3BufferedWriter
对象不会为您这样做
>>> import sys
>>> getattr(sys.stdout, 'buffer', sys.stdout)
<_io.BufferedWriter name='<stdout>'>