2009-05-25 53 views
53

在蟒蛇2.x的我能做到這一點:如何在python 3的stdout中編寫二進制數據?

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

但是現在,我得到一個TypeError: can't write bytes to text stream。我應該使用一些祕密編碼嗎?

+3

這將是更好的找到一個答案,將與Python 2.6 + 3合作。 x – sorin 2010-06-14 17:19:54

+1

`os.write`可以在Py2和Py3上運行。 – 2014-04-26 17:50:40

回答

90

一種更好的方式:

import sys 
sys.stdout.buffer.write(b"some binary data") 
10
import os 
os.write(1, a.tostring()) 

,或者os.write(sys.stdout.fileno(), …)如果這是比1你更具可讀性。

+0

謝謝,這工作。感覺有點黑客,但我想這不是一件常見的事情。 – 2009-05-25 23:21:54

+4

`os.write`的問題是你必須檢查返回值,因爲它不能保證所有內容都會被寫入。 – 2015-09-01 18:04:50

0

如果你想指定python3編碼仍然可以使用的字節命令象下面這樣:

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") 
相關問題