저는 인공지능 개인비서를 작성하고 있습니다. 이 소프트웨어의 일부는 모니터링 데몬입니다. 사용자 활동 창을 모니터링하는 작은 프로세스입니다. 저는 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()
이것은 매우 낮은 수준의 정보입니다. 프로그램에서 이러한 낮은 수준의 열기/닫기 이벤트를 얼마나 자주 사용하는지 놀랄 수도 있습니다. 언제든지 이벤트를 필터링하고 결합할 수 있습니다(예를 들어 특정 기간 동안 동일한 파일에 대해 수신된 이벤트가 동일한 액세스에 해당한다고 가정).