【问题标题】:Flush data written to numeric file handle?刷新数据写入数字文件句柄?
【发布时间】:2019-03-23 05:04:23
【问题描述】:

如何刷新写入作为数字文件句柄打开的文件的内容?

为了说明,可以在 Python 中执行以下操作:

f = open(fn, 'w')
f.write('Something')
f.flush()

相反,我在执行以下操作时缺少一种方法:

import os
fd = os.open(fn)
os.pwrite(fd, buffer, offset)
# How do I flush fd here?

【问题讨论】:

  • 我看不懂第二个不是也在python里吗?
  • @Rarblack 是的。

标签: python python-3.x file-io operating-system


【解决方案1】:

使用os.fsync(fd)fsyncdocs

如果你对从 python 文件对象获得的文件描述符执行fsync,请小心。在这种情况下,您需要先刷新 python 文件对象。

【讨论】:

  • AFAIK,严格来说,fsync 不等于 flush。两者都针对不同的缓冲区/缓冲级别。该文档还指出:如果您从缓冲的 Python 文件对象 f 开始,首先执行 f.flush(),然后 然后执行 os.fsync(f.fileno( )),以确保与 f 关联的所有内部缓冲区都写入磁盘。
  • 你是对的。当使用文件对象时,CPython 使用例如BufferedWriter 和它的flush 不做任何低级的fsync,它所做的只是对原始流的低级write。我理解这个问题的方式是 OP 想要刷新文件描述符的内容,这正是 fsync 所做的(例如 POSIX fsync docs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多