2012-12-21 2 views
2

디렉토리를 검색하여 새 파일이 추가 된시기를 확인하고 그 내용을 처리하는 스크립트가 있습니다. 동영상 파일이기 때문에 대개 크기가 커서 네트워크를 통해 전송되고 전송하는 데 오랜 시간이 걸릴 수 있습니다. 따라서 계속하기 전에 복사가 완료되었는지 확인해야합니다.Python : 새 파일을 확인하고 전송이 완료 될 때까지 기다리십시오.

현재 디렉토리에 새 파일이 있으면 os.path.mtime을 사용하여 수정 날짜를 확인하고 파일을 마지막으로 스캔 한 시간과 비교하여 파일이 있는지 확인합니다 여전히 수정 중입니다. 그것이 더 이상 수정되지 않는다면 이론이 옮겨야한다.

if getmtime(path.join(self.rootFolder, thefile)) < self.lastchecktime: newfiles.append[thefile] 

하지만 작동하지 않는 것 같습니다. 스크립트가 너무 일찍 트리거되고 파일이 완전히로드되지 않아 처리가 실패합니다. mtime이 동일하게 유지하는 스캔 사이에 일시 중지가 충분하지 않을 수 있습니까? 스캔 사이에 10 초를 드리겠습니다. 충분히 빨라야합니다.

이 작업을 쉽게 수행 할 수있는 방법이 있습니까? 파일은 VM에서 실행되는 Windows 서버에 있습니다.

답변

0

파일 추가에 대한 모든 권한이 있습니까? 그렇다면 동영상 업로드가 완료되면 videoname-complete과 같은 이름의 빈 파일을 만들어 해당 파일을 볼 수 있습니다.

+0

no. 그것은 많은 사용자가있는 드롭 박스 유형입니다. – stib

1

"마지막으로 확인한 시간보다 수정 된 시간이 오래 되었습니까?"

if os.path.getmtime(path) > self.lastAccessedTime: 
    # do something as modified time is greater than last time I checked 
    pass 

저는 Windows 사용자가 아니지만 Windows 용으로 제공 할 수있는 동등한 라이브러리가있을 것입니다. 파일 시스템 레벨에서 파일 또는 디렉토리 변경 사항을 청취하는 것은 정말 좋은 방법입니다. pyinotify로 리눅스에서 작동하는 몇 가지 샘플 코드를 남겨두고 있는데, 리눅스에서 누군가에게 도움이 될 것입니다.

class PTmp(pyinotify.ProcessEvent): 
    def process_IN_CLOSE_WRITE(self, event): 
     print "Changed: %s " % os.path.join(event.path, event.name) 


wm = pyinotify.WatchManager() 
mask = pyinotify.IN_CLOSE_WRITE 
notifier = pyinotify.Notifier(wm, PTmp()) 
wdd = wm.add_watch(FILE_LOCATION, mask, rec=True) 

while True: 
    try: 
     notifier.process_events() 
     if notifier.check_events(): 
      notifier.read_events() 

    except KeyboardInterrupt: 
     notifier.stop() 
     break 
+0

아니요, 수정 시간이 마지막으로 확인한 시간보다 큰 경우 그 동안 파일에 문제가 발생하여로드 중일 수 있습니다. 새 파일 찾기가 작동하면 문제를 변경 한 새 파일을 찾는 것입니다. 질문을 업데이트했습니다. – stib

+0

죄송합니다. 파일 업로드가 완료되었는지 확인하려고합니까? – opensourcegeek

+0

예, 따라서 제목에서 "전송을 마칠 때까지 기다려주십시오." – stib

관련 문제