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

Я пишу личного помощника 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. Вы всегда можете фильтровать и объединять события (например, предположить, что события, полученные для одного и того же файла за определенный период времени, соответствуют одному и тому же доступу).

  • не удается найти документацию по json.tool
  • Лучшая практика обновления собственного приложения
  • FreeBSD: невозможно установить Python 2.7
  • туннель в скрипте python с выполнением команды python
  • Когда я нахожусь в VirtualEnv и делаю apt-get install, есть ли разница?
  • Сценарий Bash не может расширять переменную среды, несмотря на несколько разных подходов
  • Разрешение запрещено в скриптовой тюрьме chroot
  • Скопируйте и получите файлы с одной машины, которая связана через ssh с другим
  • Python теперь считает, что аргументы являются файлами: Broken emerge, pip, livestreamer и большинство инструментов с использованием Python
  • ConfigParser.NoSectionError: Нет раздела: «общий» при попытке добавить репозиторий
  • сохранить вывод скрипта python в текстовый файл
  • Linux и Unix - лучшая ОС в мире.