ファイルの開閉を監視する方法は?

ファイルの開閉を監視する方法は?

私は人工知能個人秘書を作成しています。このソフトウェアの一部は監視デーモンです。ユーザーアクティビティウィンドウを監視する小さなプロセスです。私はPythonを使用しています(アクティブウィンドウに関する情報を取得するためにlibwnckとpsutilsを使用しています)。私がモニターに望んでいることの1つは、リスナーが定期的に聴く音楽を追跡することです。

ファイルの開閉を「監視」できますか? psutils.Processには開いているファイルのリストを返す関数がありますが、それを確認するためにそれを知らせる方法が必要です。現時点では、ウィンドウが切り替えられたとき、またはウィンドウが開いたり閉じたりしたときにのみプロセスデータを確認します。

ベストアンサー1

サブシステムを使用してファイルの開閉を監視できますinotifypyinotifyこのサブシステムへのインターフェースです。

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

これは非常に低いレベルの情報です。プログラムがこれらの低レベルのオープン/クローズイベントをどのくらいの頻度で使用しているか驚くことがあります。いつでもイベントをフィルタリングして組み合わせることができます(たとえば、特定の期間に同じファイルに対して受信したイベントが同じアクセスに対応すると仮定します)。

おすすめ記事