2011-03-29 8 views
2

두 파일을 모두 파싱하는 두 개의 Python 스크립트를 작성하고 있습니다. 하나는 표준 유닉스 로그 파일이고 다른 하나는 바이너리 파일입니다. 나는 그들을 모니터링하는 최선의 방법을 알아 내려고 노력하고있어 업데이트 된 데이터를 읽을 수 있습니다. 지금까지 내가 찾은 솔루션의 대부분은 리눅스에 특화되어 있지만 FreeBSD에서 작동하려면이 패키지가 필요합니다.업데이트 된 파일을 파이썬에서 즉시 읽음

분명히 한 가지 방법은 모든 X 시간마다 내 스크립트를 실행하는 것입니다. 그러나 이것은 총체적이고 비효율적 인 것으로 보입니다. 파이썬 앱을 백그라운드에서 지속적으로 실행하여 파일을 모니터링하고 변경/업데이트 한 후에는 가장 좋은 방법은 무엇입니까?

+0

'tail -f'를 사용할 수 있습니까? –

+0

정확히 바이너리 파일로 재생되지 않습니다 :) – fbd39j

답변

2

KQueue 이벤트를 사용해 보셨습니까?

http://docs.python.org/library/select.html#kqueue-objects

kqueue는 inotify를 (파일 변경 알림 서비스)의 FreeBSD의/OS 버전이다. 나는 이것을 사용하지 않았지만 그것이 당신이 원하는 것이라고 생각합니다.

2

한때 파이썬으로 작성된 파서에 대해 일종의 데몬 프로세스를 만들었습니다. 일련의 파일을보고 Python으로 처리해야했지만, 진정한 멀티 OS 솔루션 (이 경우 Windows & 리눅스)이어야했습니다. 필자는 수정 시간을 확인하여 파일 목록을 감시하는 프로그램을 작성했습니다. 이 프로그램은 잠시 잠자기 후 감시되는 파일의 수정 시간을 확인합니다. 수정 시간이 이전에 등록 된 것보다 새로운 경우 파일이 변경되었으므로이 파일로 작업해야합니다. 이 같은

뭔가 :

import os 
import time 

path = os.path.dirname(__file__) 
print "Looking for files in", path, "..." 

# get interesting files 
files = [{"file" : f} for f in os.listdir(path) if os.path.isfile(f) and os.path.splitext(f)[1].lower() == ".src"] 
for f in files: 
    f["output"] = os.path.splitext(f["file"])[0] + ".out" 
    f["modtime"] = os.path.getmtime(f["file"]) - 10 
    print " watching:", f["file"] 


while True: 
    # sleep for a while 
    time.sleep(0.5) 
    # check if anything changed 
    for f in files: 
     # is mod time of file is newer than the one registered? 
     if os.path.getmtime(f["file"]) > f["modtime"]: 
      # store new time and... 
      f["modtime"] = os.path.getmtime(f["file"]) 
      print f["file"], "has changed..." 
      # do your stuff here 

그것은 최고 수준의 코드처럼 보이지 않는,하지만 그것은 아주 잘 작동합니다.

이 이것에 대해 다른 SO 질문은,하지만 귀하의 질문에 직접 답을 제공 있을지 모르겠어요 :

How to implement a pythonic equivalent of tail -F?

How do I watch a file for changes?

How can I "watch" a file for modification/change?

희망 이게 도움이됩니다!

+0

답장을 보내 주셔서 감사합니다. 비 폴링 (non-polling) 솔루션을 원하고 kqueue에서이 기능을 사용할 수 있는지 확신 할 수 없었습니다. 귀하의 링크 중 하나에 대해서는 체크 아웃 워치 독에 도움이되는지 확인하겠습니다. – fbd39j

관련 문제