在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 :(得分: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
。否则,您的程序将无法再打印到标准输出。但是,对于其他类型的文件描述符,您可能要跳过该部分。