问题:如何在python 3中将二进制数据写入stdout?
在python 2.x中,我可以这样做:
import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)
但是现在,我得到了TypeError: can't write bytes to text stream
。我应该使用一些秘密编码吗?
回答 0
更好的方法:
import sys
sys.stdout.buffer.write(b"some binary data")
回答 1
import os
os.write(1, a.tostring())
或者,os.write(sys.stdout.fileno(), …)
如果这比1
您可读性强。
回答 2
只能在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
块时关闭。否则,您的程序将无法再打印到标准输出。但是,对于其他类型的文件描述符,您可能要跳过该部分。
回答 3
如果您想在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")