Как контролировать открытие и закрытие файлов?

Я пишу личного помощника AI. Одна часть программного обеспечения – демон монитора. Небольшой процесс, который активирует активные окна монитора. Я использую python (с libwnck и psutils для получения информации об активных окнах). Одна вещь, которую я бы хотел, чтобы мой монитор должен был следить за музыкой, которую слушатель часто слушает.

В любом случае я могу «контролировать» открытие и закрытие файлов? psutils.Process имеет функцию, которая возвращает список открытых файлов, но мне нужно как-то уведомить ее, чтобы проверить ее. В настоящее время он проверяет только данные процесса при переключении окон или открытии или закрытии окна.

One Solution collect form web for “Как контролировать открытие и закрытие файлов?”

Вы можете контролировать открытие / закрытие файлов с помощью подсистемы 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() 

Это довольно низкоуровневая информация – вы можете быть удивлены, как часто ваша программа использует эти низкоуровневые события open / close. Вы всегда можете фильтровать и объединять события (например, предположить, что события, полученные для одного и того же файла за определенный период времени, соответствуют одному и тому же доступу).

  • Cron Job для продолжения работы Daemon?
  • Не удалось импортировать cv2 в python2
  • Включены ли Redhat и CentOS с предустановленной zlib?
  • Не удается удалить принадлежащую папке через FTP
  • Почему мой скрипт Python, установленный на пипсе, не является исполняемым для всех?
  • CentOs7 Python 3.4 Способ установки
  • Как установить последнюю версию Python на Debian отдельно или обновить?
  • Wireshark: удаленный захват по UART
  • OPENSSL_1.0.0 не найден при запуске PyPy 4.0.1 на Amazon Linux (AWS EC2)
  • Проверка среды рабочего стола из командной строки
  • FreeBSD: использование python3 в uwsgi вместо python2
  • Linux и Unix - лучшая ОС в мире.