2013-09-23 41 views
8

我有兩段代碼都是要做同樣的事情 - 坐在循環中,直到文件完成寫入。它們都主要用於通過FTP/SCP進入的文件。Python os.stat(file_name).st_size vs os.path.getsize(file_name)

代碼的一個版本,它使用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()不會呢?我沒有看到任何錯誤或異常回來。

回答

15

在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 

由此看來,這是由於不同的似乎很清楚,沒有理由期望這兩種方法的理解不同(也許除了代碼中循環的結構)。

+0

嗯,那很奇怪。我將不得不深入研究代碼的其餘部分,但這很好理解。謝謝! – Valdogg21

相關問題