栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python 3:使用readahead从stdin管道读取字节

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 3:使用readahead从stdin管道读取字节

异常不是来自Python,而是来自操作系统,该操作系统不允许在管道上进行搜索。(如果您从常规管道重定向输出,即使它是标准输入,也可以对其进行查找。)这就是为什么即使类相同,在一种情况下而不是另一种情况下出现错误的原因。

用于预读的经典Python 2解决方案是将流包装在您自己的实现预读的流实现中:

class Peeker(object):    def __init__(self, fileobj):        self.fileobj = fileobj        self.buf = cStringIO.StringIO()    def _append_to_buf(self, contents):        oldpos = self.buf.tell()        self.buf.seek(0, os.SEEK_END)        self.buf.write(contents)        self.buf.seek(oldpos)    def peek(self, size):        contents = self.fileobj.read(size)        self._append_to_buf(contents)        return contents    def read(self, size=None):        if size is None: return self.buf.read() + self.fileobj.read()        contents = self.buf.read(size)        if len(contents) < size: contents += self.fileobj.read(size - len(contents))        return contents    def readline(self):        line = self.buf.readline()        if not line.endswith('n'): line += self.fileobj.readline()        return linesys.stdin = Peeker(sys.stdin)

在Python
3中,

sys.stdin
在窥视未解码流的同时支持完整操作是很复杂的-
stdin.buffer
如上所示,将其包装,然后在可窥视的流上实例化一个新
TextIOWrapper
对象,并将其安装
TextIOWrapper
sys.stdin

但是,因为你只需要在偷看

sys.stdin.buffer
,上面的代码将工作得很好,转换后
cStringIO.StringIO
,以
io.BytesIO
'n'
b'n'



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号