2015-08-29 55 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']' –