2013-09-23 24 views
8

Mam dwa kawałki kodu, które mają za zadanie zrobić to samo - siedzieć w pętli, dopóki plik nie zostanie zrobiony napisany do. Oba są używane głównie do plików przychodzących za pośrednictwem FTP/SCP.Python os.stat (nazwa_pliku) .st_size versus os.path.getsize (nazwa_pliku)

Jedna wersja kodu to używając 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] 

Inna wersja to robi z 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 

widziałem wiele przypadków, w których za pomocą pierwszej metody informuje, że rozmiary są takie same, podczas gdy plik wciąż rośnie. Czy istnieje jakiś podstawowy powód, dla którego os.stat() nieprawidłowo zgłasza się, podczas gdy os.path.getsize() nie będzie? Nie widzę żadnych błędów ani wyjątków.

Odpowiedz

15

W CPython 2.6 i 2.7, os.path.getsize() jest realizowany w następujący sposób:

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

Z tego, wydaje się całkiem jasne, że nie ma powodu, by spodziewać się dwa podejścia do zachowują się inaczej (z wyjątkiem być może ze względu na odmienny struktury pętli w twoim kodzie).

+0

hmm, bardzo dziwne. Będę musiał przyjrzeć się dokładniej pozostałej części kodu, ale dobrze to wiedzieć. dzięki! – Valdogg21