我可以在不重新打开的情况下从打开的文件中读取新数据吗?

时间:2014-08-20 19:39:49

标签: python macos file-io

考虑让文件test.txt包含一些随机文本。

现在我们运行以下代码:

f = open('test.txt', 'r')
f.read()

现在我们将数据从其他进程附加到test.txt。如果没有重新开放f我们可以read新数据吗?

这个问题仅限于Python,只需要很少量的代码即可获得重点。

编辑:我已经尝试了我所知道的一切(冲洗,阅读,寻求等),但似乎没有更新任何东西。

编辑:由于看起来行为有所不同,具体取决于文件如何"附加到",我将给出更具体的设置。我在OS X 10.9上,并且我试图阅读由/var/log/system.log写的syslogd

编辑:看来我错了。使用read会提取新数据,但如果数据较小,则必须首先使用flush才能读取数据。

1 个答案:

答案 0 :(得分:4)

如果您再次阅读f,您将获得更多数据。

f = open('my_file')
print(f.read())
# in bash: echo 'more data' >> my_file
print(f.read())

f基本上是一个带位置的文件句柄,再次读取它只会继续从当前位置读取。

这也可能受 正在修改文件的影响。许多文本编辑器将首先保存到单独的文件,然后复制原始文件。如果发生这种情况,您将看不到更改,因为它们位于新文件中。您可以继续使用现有文件,但只要关闭它,操作系统就会完成删除。