Você pode monitorar a abertura / fechamento de arquivos usando o subsistema inotify
.
pyinotify
é uma interface para este subsistema.
Note que se você tem muitos eventos para inutilizar, alguns podem ser descartados, mas funciona para a maioria dos casos (especialmente o caso em que a interação com o usuário conduzirá a abertura / fechamento de arquivos).
pyinotify está disponível via easy_install / pip e no link
MWE (com base no link ):
#!/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()
Esta é uma informação de nível muito baixo - você pode se surpreender com a frequência com que seu programa usa esses eventos de abertura / fechamento de baixo nível. Você sempre pode filtrar e unir eventos (por exemplo, suponha que os eventos recebidos pelo mesmo arquivo em um determinado período correspondam ao mesmo acesso).