【问题标题】:Python 2.7 - How to programmatically read binary data from stdinPython 2.7 - 如何以编程方式从标准输入读取二进制数据
【发布时间】: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


【解决方案1】:

只需删除 python2 的缓冲区:

import sys

input = sys.stdin.read()

【讨论】:

  • 谢谢!我以为我必须为此做一些特别的事情,但事实并非如此,我很惊喜。
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 2010-12-08
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2015-08-14
  • 1970-01-01
相关资源
最近更新 更多