Python:file.write()与file.flush()

时间:2017-02-18 22:15:23

标签: python io flush

file.write()和file.flush()有什么区别?

MULTI,我明白了:

  

flush()将缓冲区中保存的强制字节强制转换为原始流。一个   如果原始流阻塞,则应该引发BlockingIOError。

     

写(b)写入类似字节的对象b,并返回数字   写的字节数。处于非阻塞模式时,会引发BlockingIOError   如果需要写出缓冲区但原始流阻塞。

就我的新手理解而言,它们都将当前保存在内存中的信息传输到磁盘上的文件中。但是,write()的不同之处还在于返回有关存储信息量的信息,而flush()会立即执行此任务。那是对的吗? 在什么情况下,最好在flush()上应用write(),反之亦然?

1 个答案:

答案 0 :(得分:2)

[另请参阅Stephen Rauch和Peter Wood的评论]在流的上下文中考虑它,该流与另一端从该流读取的内容相关联。

写(b)在你的结尾为那个流的缓冲区贡献b。它可能会或可能不会实际放入所有这些字节,以便它们在流中“发送”到另一端的阅读器。

另一方面,

flush()获取流缓冲区中的所有内容,并将其“发送”给读者。

基本上,你使用write(b)将数据加载到流上,然后你们在最后刷新()以确保所有内容实际进入底层流并且“已被发送”,而不是坐着在流的缓冲区中。

因此,例如,如果我使用PySerial包将我的计算机连接到另一台设备(它创建一个有效地用作流的串行连接),然后将一些数据放入该流中,我将使用write(b) 。为了确保所有数据都通过串行连接并通过其他设备,我将调用flush()。这是因为write(b)不保证该数据的所有(或任何实际)实际上会立即发送到另一个设备。