私は人工知能個人秘書を作成しています。このソフトウェアの一部は監視デーモンです。ユーザーアクティビティウィンドウを監視する小さなプロセスです。私はPythonを使用しています(アクティブウィンドウに関する情報を取得するためにlibwnckとpsutilsを使用しています)。私がモニターに望んでいることの1つは、リスナーが定期的に聴く音楽を追跡することです。
ファイルの開閉を「監視」できますか? 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()
これは非常に低いレベルの情報です。プログラムがこれらの低レベルのオープン/クローズイベントをどのくらいの頻度で使用しているか驚くことがあります。いつでもイベントをフィルタリングして組み合わせることができます(たとえば、特定の期間に同じファイルに対して受信したイベントが同じアクセスに対応すると仮定します)。