2012-05-13 3 views
3

나는 Mac에있다. 필자는 Launchd의 WatchPaths 지시문을 사용하여 파일 변경을위한 디렉토리를 보았습니다. 내 스크립트는 감시 된 디렉토리에서 파일을 추가하거나 삭제할 때만 트리거됩니다. 파일이 수정 될 때 파일 수정을위한 디렉토리를 보는 방법

그러나, 스크립트는 내 사이트 폴더를 동기화를위한 DIY 드롭 박스를 만들려고 해요, 기본적으로 ..

를 트리거하지 않습니다.

launchd, bash 또는 python을 통해이를 수행 할 수있는 방법이 있습니까?

나는 리눅스가 inotify와 비슷한 것을 가지고 있다고 생각하지만 나는 mac을위한 해결책을 모르고있다.

+1

이상적으로, 매 n 초마다 변경 사항을 폴링하고 싶지 않습니다. – jessh

+0

내가 아는 유일한 해결책은 폴링입니다. 제가 제안하려고했던 방법의 예는 여기에서 찾을 수 있습니다 : https://github.com/jessemiller/HamlPy/blob/2e029110b6ab2f502439634ded7a781b4a521cfe/hamlpy/hamlpy_watcher.py#L28 - 누군가가 제공 할 수 있는지보고 싶습니다. 대안! – modocache

+0

MacOS는 FreeBSD 스타일의'kqueue'를 지원합니다. 이것은'inotify'와 여러면에서 유사합니다. 실제로 그것을 작동하게하는 방법, 나는 모른다. :-) – torek

답변

2

나는 (도 available on PyPI)를 MacFSEvents 패키지를 사용하여 문제에 내 손을 시도 :

import os 

from fsevents import Observer, Stream 


def callback(file_event): 
    print file_event.name # the path of the modified file 


def main(): 
    observer = Observer() 
    observe_path = os.getcwd() # just for this example 
    stream = Stream(callback, observe_path, file_events=True) 
    observer.start() 
    observer.schedule(stream) 


if __name__ == '__main__': 
    main() 

이 (확인할 수있는 파일을 생성, 수정, 또는 삭제 될 때마다 callback를 호출하는 이벤트는 file_event.mask의 값을 사용하여 발생했습니다.

주 스레드 외부의 스레드를 관찰하고 싶을 것입니다 (위의 프로그램은 종료하지 않으므로 심지어는 KeyboardInterrupt에 있음). API에 대한 자세한 내용은 MacFSEvents README를 참조하십시오. 희망이 도움이!

+0

이것은 완전히 도움이됩니다! 나는 쓰레드에 익숙하지 않다. 그것에 대해 더 많이 배우거나 다른 쓰레드를 관찰하기위한 포인터는 무엇인가? – jessh

+3

JoeFish는 [Watchdog] (http://pypi.python.org/pypi/watchdog)을 추천했습니다. 그렇지 않으면, [체크 아웃] (http://www.artfulcode.net/articles/multi-threading-python/) [articles] (http://www.ibm.com/developerworks/aix/library/au-threadingpython /). – modocache