변경에 대한 디렉토리 모니터링 할 GIO FileMonitor를 사용합니다 (이 질문에 대한 GIO answer에서) 다음 데모 코드를 가지고 :이 코드를 실행 한 후PyGTK/GIO : 변경을위한 모니터 디렉토리는 재귀 적으로
import gio
def directory_changed(monitor, file1, file2, evt_type):
print "Changed:", file1, file2, evt_type
gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)
import glib
ml = glib.MainLoop()
ml.run()
을, 그런 다음 하위 노드를 만들고 수정하고 변경 사항을 알릴 수 있습니다. 그러나 이는 직접적인 어린이들에게만 작용합니다 (나는 문서가 다른 말을하지 않는다는 것을 알고 있습니다). 다음 셸 명령 중 마지막 명령은 알림을 표시하지 않습니다.
touch one
mkdir two
touch two/three
쉽게 재귀 적으로 만들 수있는 방법이 있습니까? 차라리 직접 디렉토리 생성을 찾고 모니터를 추가하고 삭제시 삭제하는 등의 수동 코딩을하지 않을 것입니다.
의도 된 용도는 VCS 파일 브라우저 확장 프로그램에서 파일의 상태를 캐시 할 수 있습니다. 작업 복사본을 만들고 변경 사항을 개별적으로 업데이트하십시오. 따라서 수십에서 수천 (또는 그 이상의) 디렉토리를 모니터링 할 수 있습니다. 작업 복사본의 루트를 찾고 거기에 파일 모니터를 추가하고 싶습니다.
나는 약 pyinotify을 알고 있지만, FreeBSD 또는 기타와 같은 비 Linux 커널에서 작동하도록 피하고 있습니다. 내가 아는 한, GIO FileMonitor는 사용 가능한 곳에서 inotify를 사용하며 어느 정도의 추상화를 유지하기 위해 구현을 강조하지 않고 이해할 수 있지만 가능한 것이어야한다고 제안했습니다.
(여기서 내가 원래 PyGTK mailing list에 게시, 중요.)
이것은 나에게 정말 좋은 출발점을주었습니다. 덕분에 :) 여러 대의 모니터를 가질 수는 없었습니다. 너무 리소스 집약적 인 지 알아보기 위해 테스트해야하지만 파일이 아닌 디렉토리를보고 있으면 저를 구할 수 있습니다. 버전 제어 된 트리를 모니터링하므로 관리 디렉토리 (예 : .svn 또는 .git)를 무시할 수있는 유연성을 제공합니다. – detly
삭제 된 디렉토리의 모니터를 수동으로 취소하고 제거해야하는지 여부를 확인해야합니다. – detly
무시 파일을 만들고 무시 파일의 파일 이름과 비교하여 파일 이름을 확인할 수도 있습니다. 가장 간단한 방법은 한 줄에 하나씩 파일을 작성하는 것이며,'f.seek (0)','ignorelist = f.readlines()','ignorelist : # skip '이 변경 될 때마다 –