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

时间:2014-05-29 11:32:14

标签: python python-3.x binary stdout

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

检索此类对象的最优雅/首选方法是什么,以便它对python2和python3解释器都有效?

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

1 个答案:

答案 0 :(得分:10)

无需测试,只需使用getattr()

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

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

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>'>

考虑到在Python 2中,stdout仍然在文本模式下打开,写入时换行仍然会转换为os.linesep。 Python 3 BufferedWriter对象不会为你做这件事。