Python os.stat (file_name) .st_size versus os.path.getsize (file_name)

Tengo dos piezas de código que están destinadas a hacer lo mismo: sentarse en un bucle hasta que se termine de escribir un archivo. Ambos se utilizan principalmente para los archivos que llegan a través de FTP / SCP.

Una versión del código lo hace usando os.stat()[stat.ST_SIZE] :

 size1,size2 = 1,0 while size1 != size2: size1 = os.stat(file_name)[stat.ST_SIZE] time.sleep(300) size2 = os.stat(file_name)[stat.ST_SIZE] 

Otra versión lo hace con os.path.getsize() :

 size1,size2 = 0,0 while True: size2 = os.path.getsize(file_name) if size1 == size2: break else: time.sleep(300) size1 = size2 

He visto varias instancias en las que el primer método informa que los tamaños son los mismos mientras el archivo sigue creciendo. ¿Hay alguna razón subyacente por la cual os.stat() informaría incorrectamente mientras que os.path.getsize() no lo haría? No veo que vuelvan a aparecer errores o excepciones.

En CPython 2.6 y 2.7, os.path.getsize() se implementa de la siguiente manera:

 def getsize(filename): """Return the size of a file, reported by os.stat().""" return os.stat(filename).st_size 

A partir de esto, parece bastante claro que no hay razón para esperar que los dos enfoques se comporten de manera diferente (excepto quizás debido a las diferentes estructuras de los bucles en su código).