2013-09-23 2 views
8

같은 것을하기위한 두 가지 코드가 있습니다. 파일이 완성 될 때까지 루프에 앉아 있습니다. 에 써졌다. 이들은 주로 FTP/SCP를 통해 들어오는 파일에 사용됩니다.파이썬 os.stat (file_name) .st_size 대 os.path.getsize (file_name)

코드의 한 버전이 os.stat()[stat.ST_SIZE]

사용 않습니다 : 첫 번째 방법을 사용하면 크기보고 어디 여러 인스턴스를 본 적이

size1,size2 = 0,0 
while True: 
    size2 = os.path.getsize(file_name) 
    if size1 == size2: 
    break 
    else: 
    time.sleep(300) 
    size1 = size2 

:

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() 함께 수행 파일이 실제로 성장하는 동안 동일합니다. os.path.getsize()이 아니라면 os.stat()이 잘못보고되는 몇 가지 근본적인 이유가 있습니까? 오류나 예외가 다시 나타나지 않습니다.

다음과 같이 은 CPython과 2.6 및 2.7에서

답변

15

, os.path.getsize()는 구현이에서

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

, 그것으로 인해 다른에 두 가지 방법이 아마 제외하고는 (다르게 동작 할 것으로 예상 할 이유가 없다는 것을 아주 명확 보인다 귀하의 코드에서 루프의 구조).

+0

음, 매우 이상합니다. 코드의 나머지 부분을 좀 더 자세히 살펴 봐야 할 것입니다. 그러나 이것은 알아두면 좋습니다. 감사! – Valdogg21