파일 열기 및 닫기를 모니터링하는 방법은 무엇입니까?

파일 열기 및 닫기를 모니터링하는 방법은 무엇입니까?

저는 인공지능 개인비서를 작성하고 있습니다. 이 소프트웨어의 일부는 모니터링 데몬입니다. 사용자 활동 창을 모니터링하는 작은 프로세스입니다. 저는 Python을 사용하고 있습니다(활성 창에 대한 정보를 얻기 위해 libwnck 및 psutils 사용). 내가 모니터에 바라는 것 중 하나는 청취자가 정기적으로 듣는 음악을 추적하는 것입니다.

파일이 열리고 닫히는 것을 "모니터링"할 수 있습니까? psutils.Process에는 열린 파일 목록을 반환하는 함수가 있지만 이를 확인하기 위해 이를 알리는 방법이 필요합니다. 현재는 창이 전환되거나 창이 열리거나 닫힐 때만 프로세스 데이터를 확인합니다.

답변1

하위 시스템을 사용하여 파일 열기/닫기를 모니터링할 수 있습니다 inotify. pyinotify이 하위 시스템에 대한 인터페이스입니다.

inotify할 이벤트가 많은 경우 일부를 제거할 수 있지만 대부분의 경우 작동합니다(특히 사용자 상호 작용으로 인해 파일 열기/닫기가 발생하는 경우).

pyinotify는 easy_install/pip 및 다음 위치에서 사용할 수 있습니다.https://github.com/seb-m/pyinotify/wiki

MWE (기준http://www.saltycrane.com/blog/2010/04/monitoring-filesystem-python-and-pyinotify/):

#!/usr/bin/env python
import pyinotify

class MyEventHandler(pyinotify.ProcessEvent):
    def process_IN_CLOSE_NOWRITE(self, event):
        print "File closed:", event.pathname

    def process_IN_OPEN(self, event):
        print "File opened::", event.pathname

def main():
    # Watch manager (stores watches, you can add multiple dirs)
    wm = pyinotify.WatchManager()
    # User's music is in /tmp/music, watch recursively
    wm.add_watch('/tmp/music', pyinotify.ALL_EVENTS, rec=True)

    # Previously defined event handler class
    eh = MyEventHandler()

    # Register the event handler with the notifier and listen for events
    notifier = pyinotify.Notifier(wm, eh)
    notifier.loop()

if __name__ == '__main__':
    main()

이것은 매우 낮은 수준의 정보입니다. 프로그램에서 이러한 낮은 수준의 열기/닫기 이벤트를 얼마나 자주 사용하는지 놀랄 수도 있습니다. 언제든지 이벤트를 필터링하고 결합할 수 있습니다(예를 들어 특정 기간 동안 동일한 파일에 대해 수신된 이벤트가 동일한 액세스에 해당한다고 가정).

관련 정보