Linux

如何監控文件的打開和關閉?

  • June 3, 2015

我正在寫一個人工智慧個人助理。該軟體的一部分是監視器守護程序。一個監視使用者活動視窗的小程序。我正在使用 python(與 libwnck 和 psutils 一起獲取有關活動視窗的資訊)。我希望我的顯示器做的一件事是跟踪聽眾經常聽的音樂。

無論如何我可以“監視”文件的打開和關閉嗎?psutils.Process 有一個返回打開文件列表的函式,但我需要一些方法來通知它來檢查它。目前它僅在視窗切換或打開或關閉視窗時檢查程序數據。

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()

這是相當低級的資訊——您可能會驚訝於您的程序使用這些低級打開/關閉事件的頻率。您始終可以過濾和合併事件(例如,假設在特定時間段內為同一文件接收到的事件對應於相同的訪問)。

引用自:https://unix.stackexchange.com/questions/207304