14

我有两段代码,它们都打算做同样的事情——坐在一个循环中,直到一个文件被写入完成。它们都主要用于通过 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()不会?我没有看到任何错误或异常回来。

4

1 回答 1

26

在 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

由此看来,似乎很清楚没有理由期望这两种方法表现不同(可能是由于代码中循环的不同结构)。

于 2013-09-23T14:43:59.093 回答