首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: sys.stdout.flush()和sys.stdout.buffer.flush()?

Python: sys.stdout.flush()和sys.stdout.buffer.flush()?
EN

Stack Overflow用户
提问于 2017-02-02 13:15:07
回答 1查看 3.9K关注 0票数 3

假设您需要将二进制数据写入标准输出:

代码语言:javascript
复制
sys.stdout.buffer.write(data)

然后,您可以使用这两种方法中的任何一种来冲洗它:

代码语言:javascript
复制
sys.stdout.flush()
sys.stdout.buffer.flush()

在一个简单的情况下,这两个电话的工作方式似乎是一样的。然而:

  • 第一个调用整个stdout对象(_io.TextIOWrapper)上的刷新
  • 第二个调用只对buffer子对象(_io.BufferedWriter)进行刷新。

在哪种情况下,一个人宁愿选择一个而另一个呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 13:34:00

从根本上讲,TextIOWrapperBufferedWriter之间的区别在于它们被设计用来处理什么。通过查看Python文档,您将看到BufferedWriter设计用于处理字节流:

BufferedIOBase处理原始字节流(RawIOBase)上的缓冲。它的子类BufferedWriterBufferedReaderBufferedRWPair缓冲区流是可读的、可写的、可读的和可写的。

虽然TextIOWrapper被设计用来处理特定于文本的字节流,但是处理诸如编码和解码之类的事情。

另一个IOBase子类TextIOBase处理字节表示文本的流,并处理从unicode字符串到unicode字符串的编码和解码。扩展它的TextIOWrapper是到缓冲原始流(BufferedIOBase)的缓冲文本接口。

至于哪一个你应该叫同花顺。这是一个清洗,因为TextIOWrapper实际上只是文本BufferedIOBase的一个很好的包装器。因此,如果正如您所说的那样,您实际上是在处理二进制数据,而不是基于文本的数据,那么您可以只使用BufferedIOBase

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42003208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档