【发布时间】:2017-02-25 00:38:47
【问题描述】:
我希望能够使用 python 从标准输入读取二进制数据。
但是,当我使用input = sys.stdin.buffer.read() 时,我收到AttributeError: 'file' object has no attribute 'buffer' 的错误。这似乎很奇怪,因为 docs 说我应该能够使用底层缓冲区对象 - 我该如何解决/解决这个问题?
注意:我已经检查了last time 这是被问到的,但答案都是“使用 -u”、“使用缓冲区”(我正在尝试)或有关从文件读取的内容。第一个和最后一个没有帮助,因为我无法控制这个程序的用户(所以我不能告诉他们使用特定的参数)并且因为这是标准输入,而不是文件。
【问题讨论】:
-
您正在阅读 Python 3 的文档,但使用的是 Python 2。
-
你可以使用
sys.stdin.read()。它已经是一个二进制流了。 -
您链接到的问题的 cmets 中提到了此解决方案:
sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0) -
@tavnab 当然,但那是在文本模式下阅读,如果是这样的话,OP 真的不想要
raw_input吗?我只是没有睡够吗? -
@juanpa.arrivillaga 你是对的,它默认以文本模式打开。
-u仍然需要以无缓冲和二进制模式读取它。如果 OP 希望从键盘读取无缓冲(即不等待换行符)(例如编写游戏),他们可能还需要在 tty 上启用“原始”模式
标签: python python-2.7 input binary