Python os.stat (имя файла).размер st против ос.путь.getsize не имя(файл )

у меня есть два фрагмента кода, которые предназначены для одного и того же-сидеть в цикле, пока файл не будет записан. Они оба в основном используются для файлов, поступающих через FTP/SCP.

одна версия кода делает это с помощью 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]

другая версия делает это с 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

Я видел несколько экземпляров, где с помощью первого метода сообщает, что размеры одинаковы, в то время как файл на самом деле все еще растет. Есть там какая-то основная причина, почему os.stat() некорректно отчета os.path.getsize() не будет? Я не вижу никаких ошибок или исключений.

1 ответов


в CPython 2.6 и 2.7,os.path.getsize() реализуется следующим образом:

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

из этого кажется довольно ясным, что нет причин ожидать, что два подхода будут вести себя по-разному (за исключением, возможно, из-за разных структур циклов в вашем коде).