如何在python 3中将二进制数据写入stdout?

时间:2009-05-25 23:04:06

标签: python python-3.x

在python 2.x中,我可以这样做:

import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)

然而,现在我得到TypeError: can't write bytes to text stream。我应该使用一些秘密编码吗?

4 个答案:

答案 0 :(得分:126)

更好的方法:

import sys
sys.stdout.buffer.write(b"some binary data")

答案 1 :(得分:11)

import os
os.write(1, a.tostring())

os.write(sys.stdout.fileno(), …),如果它比1更具可读性。

答案 2 :(得分:1)

如果您想在python3中指定编码,您仍然可以使用bytes命令,如下所示:

import os
os.write(1,bytes('Your string to Stdout','UTF-8'))

其中1是stdout的相应常用数字 - > sys.stdout.fileno()

否则,如果您不关心编码,请使用:

import sys
sys.stdout.write("Your string to Stdout\n")

如果您想在没有编码的情况下使用os.write,请尝试使用以下内容:

import os
os.write(1,b"Your string to Stdout\n")

答案 3 :(得分:0)

仅在Python 3中可用的惯用方式是:

with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout:
    stdout.write(b"my bytes object")
    stdout.flush()

好处是它使用普通的文件对象接口,每个人都在Python中使用它。

请注意,我设置closefd=False以避免退出sys.stdout块时关闭with。否则,您的程序将无法再打印到标准输出。但是,对于其他类型的文件描述符,您可能要跳过该部分。