2013-09-23 17 views
8

Tôi đã có hai đoạn mã được thực hiện giống nhau - ngồi trong một vòng lặp cho đến khi tệp được hoàn thành ghi vào. Cả hai đều được sử dụng chủ yếu cho các tập tin đến thông qua FTP/SCP.Python os.stat (tên tệp) .st_size so với os.path.getsize (file_name)

Một phiên bản của mã này nó sử dụng 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] 

phiên bản khác hiện điều đó với 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 

Tôi đã nhìn thấy nhiều trường hợp sử dụng phương pháp đầu tiên báo cáo rằng các kích thước là như nhau trong khi tệp thực sự vẫn đang phát triển. Có một số lý do cơ bản tại sao os.stat() sẽ báo cáo sai khi os.path.getsize() không? Tôi không thấy bất kỳ lỗi hoặc ngoại lệ nào xảy ra.

Trả lời

15

Trong CPython 2.6 và 2.7, os.path.getsize() được thực hiện như sau:

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

Từ đó, nó có vẻ khá rõ ràng rằng không có lý do để hy vọng hai cách tiếp cận để hành xử khác nhau (ngoại trừ có lẽ do sự khác nhau cấu trúc của các vòng trong mã của bạn).

+0

hmm, rất kỳ quặc sau đó. tôi sẽ phải xem xét kỹ hơn phần còn lại của mã, nhưng điều này là tốt để biết. cảm ơn! – Valdogg21

Các vấn đề liên quan