检查一个打开的文件在python中打开后是否被删除

2024-01-15

是否可以在 python 中检查文件是否已被删除或重新创建?

例如,如果您执行了open("file")在脚本中,然后当该文件仍然打开时,您可以rm file; touch file;,那么即使旧文件已被删除,脚本仍将保留对旧文件的引用。


你应该fstat打开的文件的文件描述符。

>>> import os
>>> f = open("testdv.py")
>>> os.fstat(f.fileno())
posix.stat_result(st_mode=33188, st_ino=1508053, st_dev=65027L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=1107, st_atime=1349180541, st_mtime=1349180540, st_ctime=1349180540)
>>> os.fstat(f.fileno()).st_nlink
1

好的,这个文件有一个链接,因此文件系统中有一个名称。现在删除它:

>>> os.unlink("testdv.py")
>>> os.fstat(f.fileno()).st_nlink
0

没有更多的链接,所以我们有一个“匿名文件”只要我们打开它就保持活力 https://stackoverflow.com/a/5219960/166749。创建同名的新文件对旧文件没有影响:

>>> g = open("testdv.py", "w")
>>> os.fstat(g.fileno()).st_nlink
1
>>> os.fstat(f.fileno()).st_nlink
0

当然,st_nlink有时可以是>1最初,因此检查零并不完全可靠(尽管在受控设置中,它可能足够好)。相反,您可以通过比较来验证您最初打开的路径中的文件是否与您拥有文件描述符的文件相同stat结果:

>>> os.stat("testdv.py") == os.fstat(f.fileno())
False
>>> os.stat("testdv.py") == os.fstat(g.fileno())
True

(如果你希望这是 100% 正确的,那么你应该只比较st_dev and st_ino字段上stat结果,因为其他领域和st_atime特别是在两次通话之间可能会发生变化。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查一个打开的文件在python中打开后是否被删除 的相关文章

随机推荐