2010-08-03 5 views
0

다음 코드를 가져 와서 변경 내용을보고 파일 크기가 최근에 증가하지 않았 음을 확인하면 파일 이름 (선호하는 전체 경로)을 문자열로 반환하려고합니다. 불완전한 파일을 검사하는 나머지 스크립트를 중지합니다. 탐지 된 파일을 목록으로 수집하기 때문에 파일 크기 타이머 기능을 보내는 데 문제가 있습니다. 내가 틀린 나무를 짖는다면 자유롭게 말해라. 그러면 어떤 도움을 주셔서 감사합니다!파이썬 조사 폴더 - 파일 크기에 대한 질문 목록

스튜어트

import os, time 

def watch(path_to_watch): 
    before = dict ([(f, None) for f in os.listdir (path_to_watch)]) 
    while watch_active == 1: 
     time.sleep (10) 
     after = dict ([(f, None) for f in os.listdir (path_to_watch)]) 
     added = [f for f in after if not f in before] 
     removed = [f for f in before if not f in after] 
     if added: 
      filesizechecker(added) 
      return added 
     if removed: 
      print "Removed: ", ", ".join (removed) 
     before = after 

def filesizechecker(filepath): 
# Checks filesize of input file and 
# returns 1 when file hasn't changed for 3 seconds 
    fnow = open(filepath, "rb") 
    fthen = 1 
    while fnow != fthen: 
     time.sleep(3) 
     fthen = len(f.read()) 

watch_active = 1 
watch("/home/stewart/Documents") 
+0

파일이 "진행 중"이 아닌지 테스트하는 가장 좋은 방법입니까? 예를 들어, 임시 디렉토리에 불완전한 파일을 처리 한 다음 주 디렉토리에'os.rename' (이것은 원자 적입니다)을 처리 할 수 ​​있습니다. – katrielalex

+0

아,'dict' 대신'set'을 사용해야합니다; 하나를 위해, 그것은 옳은 일을하는 방법입니다 -하지만 그뿐만 아니라, 당신은 할 수있는'추가 = 후 - 전에! 예 : 'before = set (os.listdir (...))'. – katrielalex

답변

0

당신의 시간 가치가 좀 더 연구를하고 pyinotify 라이브러리가 훨씬 더 적합 내 요구에 있었다 발견 날씨 O를이 UPT입니다.

특히 응용 프로그램 (내 경우에는 파일 복사본)이 쓰기 가능한 파일을 닫을 때 IN_CLOSE_WRITE 이벤트 코드가 반환됩니다.

0

또한 방법 lsof 작품을 확인할 수 있습니다. 열린 파일을 나열합니다. 보고있는 파일 (또는 원하는 파일)이 열려 있지 않으면 파일이 변경 될 가능성이 없습니다.

Linux를 사용 중이므로 항상/proc 파일 시스템에서 프로세스 및 파일에 대한 정보를 확인할 수 있습니다.

나는 세부 사항을 모르는, 그래서 당신은 생각이 라인은 :

+0

아이디어를 주셔서 감사합니다, extraneon. 그러나 파일은 다른 머신에서 samba/nfs/afp를 통해 전송되는 경우가 많으며 lsof와 ps aux를 테스트했으며 삼바를 통해 파일 사본을 가져 오지 않았습니다. – MessedUpHare