2015-08-29 51 views
5

我有打開並從二進制讀取文件的代碼。將stdin讀爲二進制

with open (file, mode="rb") as myfile: 
    message_string=myfile.read() 
    myfile.close 

我現在需要從stdin中讀取相同的內容。但我無法弄清楚如何讀取二進制文件。

該錯誤僅表示字節字符串。
有什麼建議嗎?

回答

8

在Python 3,如果你想從stdin讀取二進制數據,你需要使用它的buffer屬性:

import sys 

data = sys.stdin.buffer.read() 

在Python 2中,sys.stdin.read()已經返回一個字節的字符串;沒有必要使用buffer

+1

對於Python 2並非如此。它默認以文本模式讀取。例如。在Windows上,像「a \ r \ nb」這樣的文件會顯示爲「a \ nb」。看到這裏的解決方案:http://stackoverflow.com/questions/2850893/reading-binary-data-from-stdin –

+4

請參閱https://stackoverflow.com/a/38939320/239247在Windows上的正確解決方案。 –

+0

@EvgeniSergeev你真的嘗試過嗎? '$ printf「a \ r \ nb \ rc \ r」| python2.7 -c'import sys; print(sys.stdin.readlines())''產生'['a \ r \ n','b \ rc \ r']' –