gpt4 book ai didi

Python:sys.stdout.flush() 与 sys.stdout.buffer.flush()?

转载 作者:行者123 更新时间:2023-12-01 03:20:12 27 4
gpt4 key购买 nike

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

sys.stdout.buffer.write(data)

然后要刷新它,您可以使用以下两种方法之一:

sys.stdout.flush()
sys.stdout.buffer.flush()

在简单的情况下,这两个调用似乎以相同的方式工作。 但是:

  • 第一个调用整个 stdout 对象 (_io.TextIOWrapper)

  • 第二个仅在 buffer 子对象 (_io.BufferedWriter) 上调用刷新。

在什么情况下人们会更喜欢其中一种而不是另一种?

最佳答案

从根本上来说,TextIOWrapperBufferedWriter 之间的区别在于它们旨在处理的内容。查看 Python 文档,您会发现 BufferedWriter 旨在处理字节流:

BufferedIOBase deals with buffering on a raw byte stream (RawIOBase). Its subclasses, BufferedWriter, BufferedReader, and BufferedRWPair buffer streams that are readable, writable, and both readable and writable.

虽然 TextIOWrapper 旨在处理特定于文本的字节流,并处理诸如编码和解码之类的事情。

Another IOBase subclass, TextIOBase, deals with streams whose bytes represent text, and handles encoding and decoding from and to unicode strings. TextIOWrapper, which extends it, is a buffered text interface to a buffered raw stream (BufferedIOBase).

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

关于Python:sys.stdout.flush() 与 sys.stdout.buffer.flush()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com