读取标准输入流并以二进制方式处理

53

我有一段代码可以打开并读取二进制文件。

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

现在我需要从stdin中读取相同的内容,但我无法弄清如何读取二进制数据。

错误显示只接受字节串。
有什么建议吗?

1个回答

85

在Python 3中,如果您想从stdin读取二进制数据,则需要使用其buffer属性:

import sys

data = sys.stdin.buffer.read()

在Python 2中,sys.stdin.read()已经返回了一个字节字符串;没有必要使用buffer


4
Python 2 默认以文本模式读取数据,以下内容不正确。例如,在 Windows 平台上输入类似于“a\r\nb”的文件到标准输入时,输出将会是“a\nb”。点击此处可查看解决方法:https://dev59.com/p3E85IYBdhLWcg3wShef - Evgeni Sergeev
5
请参考 https://dev59.com/p3E85IYBdhLWcg3wShef#38939320 获取在Windows上的正确解决方案。 - anatoly techtonik
@EvgeniSergeev 你实际上试过这个方法吗?$ printf "a\r\nb\rc\r" | python2.7 -c 'import sys; print(sys.stdin.readlines())'将会生成 ['a\r\n', 'b\rc\r'] - Clément
2
@Clément:他们说“在Windows上”。$ 表示你没有在Windows上运行它。(除非你正在使用Windows子系统来运行Linux,但对于这些目的,我们可以认为它不是Windows。) - icktoofay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接