我可以从打开的文件中读取新数据而不重新打开它吗?

kor*_*nce 5 python macos file-io

考虑有一个文件test.txt考虑创建一个包含一些随机文本的

现在我们运行以下代码:

f = open('test.txt', 'r')
f.read()
Run Code Online (Sandbox Code Playgroud)

test.txt现在我们将来自其他进程的数据附加到其中。有什么方法f可以在不重新开放的情况下read新数据吗?

这个问题仅限于Python,只需要少量代码就可以理解要点。

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

编辑:由于行为似乎有所不同,具体取决于文件“附加”的方式,我将给出更具体的设置。我使用的是 OS X 10.9,我正在尝试读取/var/log/system.log写入的内容syslogd.

编辑:看来我错了。使用 aread会拉取新数据,但如果数据很小,则flush必须先使用 a 才能读取它。

dav*_*ism 4

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

f = open('my_file')
print(f.read())
# in bash: echo 'more data' >> my_file
print(f.read())
Run Code Online (Sandbox Code Playgroud)

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

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