Debe fstat
el descriptor de archivo para el archivo abierto.
>>> 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
Ok, este archivo tiene un enlace, por lo que un nombre en el sistema de archivos. Ahora quitarlo:
>>> os.unlink("testdv.py")
>>> os.fstat(f.fileno()).st_nlink
0
No más enlaces, por lo que tenemos un "archivo anónimo" eso es sólo kept alive as long as we have it open. Creación de un nuevo archivo con el mismo nombre no tiene ningún efecto sobre el antiguo archivo:
>>> g = open("testdv.py", "w")
>>> os.fstat(g.fileno()).st_nlink
1
>>> os.fstat(f.fileno()).st_nlink
0
Por supuesto, st_nlink
a veces puede ser >1
inicialmente, por lo que la comprobación de que para el cero no es del todo fiable (aunque en un entorno controlado, se podría ser lo suficientemente bueno).En su lugar, puede verificar si el archivo en el camino que abrió inicialmente es el mismo que tiene un descriptor de archivo para comparando stat
resultados:
>>> os.stat("testdv.py") == os.fstat(f.fileno())
False
>>> os.stat("testdv.py") == os.fstat(g.fileno())
True
(Y si quieres que esto sea 100% correcto, entonces usted debe comparar sólo los campos st_dev
y st_ino
en stat
resultados, ya que los otros campos y st_atime
en particular, podrían cambiar entre las llamadas.)
trabajo tal vez os.path.exists en este caso? – Alex
el problema con os.path.exists es que puede existir otro archivo con el mismo nombre de ruta, aunque el archivo anterior ya se haya eliminado – user1502906