Jak zobaczyć zmiany katalogu w Pythonie?

Jak zobaczyć zmiany katalogu w Pythonie?
W niektórych przypadkach, szczególnie w krytycznych i ograniczonych lokalizacjach systemu plików, pomocne może być wiedzieć, kiedy się zmienią i co się zmieniło. Korzystając z Linux Inotify Tools and Python, możemy przeglądać i rejestrować zmiany, które zachodzą w systemie.

Ten samouczek przejdzie, jak zaimplementować prosty skrypt, który używa interfejsu API Python i Linux w celu monitorowania zmian w określonym katalogu i rejestrowania zmian konsoli.

Zanim przejdziemy do scenariusza, omówmy krótko, jak działa inotify.

Co jest inotyfikujące? Jak to działa?

Inotify to podsystem jądra, który zapewnia mechanizm monitorowania zdarzeń w systemie plików i zgłaszania ich do różnych aplikacji, które ich wymagają. Inotify jest niezwykle potężny, ponieważ działa na niższych poziomach jądra i można je rozszerzyć funkcjonalność. Inotify może monitorować zmiany w katalogach i poszczególnych plikach.

Chociaż inotyfy jest potężne, ma pewne ograniczenia. Ograniczenia te obejmują:

  • Inotify nie obserwuje rekurencyjnego katalogu
  • Jest dostępny tylko w jądrze Linux
  • Zmiana nazwy zdarzeń za pomocą inotify nie jest adresowana bezpośrednio.

Jednak inotify jest nadal znacznie lepszym wyborem niż dnotify, jego poprzednik. Inotify ma wysoce obowiązujące w aplikacjach bezpieczeństwa, takich jak antywirusy.

Teraz, gdy mamy na mocy podstawową teorię podstawową, zanurzmy się w zbudowanie skryptu, który pomoże nam monitorować zmiany w katalogu.

Instalowanie Pythona i Watchdoga

Przed zanurzeniem się w kodzie skonfigurujmy kilka wymagań, takich jak instalacja Pythona i pakietu Watchdog.

Aby zainstalować Python3 w Debian, użyj polecenia Apt jako:

Sudo apt-get Aktualizacja
sudo apt-get instal Python3.7 Python3 -Pip -y

Aby zainstalować pakiet Watchdog, użyj polecenia PIP3, jak pokazano poniżej:

https: // pYPI.Org/Project/Watchdog/
Sudo PIP3 instaluj Watchdog

Pisanie skryptu

Skrypt, który stworzymy w tym samouczku, jest bardzo prosty. Rozważ kod źródłowy pokazany poniżej:

Import Sys
Rejestrowanie importu
czas importu
od Watchdog.zdarzenia importuj loggingEventHandler
od Watchdog.Obserwatorzy importują obserwator
def Monitor ():
# Dodaj podstawową konfigurację
Logowanie.BasicConfig (poziom = rejestrowanie.Informacje, format = " %(asctime) s - %(wiadomość) s",
datefmt = "%y-%m-%d%h:%m:%s")
# Zdobądź katalog jako argument
ścieżka = sys.argv [1] Jeśli len (sys.argv)> 1 else '.'
e_handler = loggingEventHandler ()
Watch = Observer ()
oglądać.harmonogram (e_handler, ścieżka, rekursive = true)
oglądać.początek()
próbować:
Choć prawda:
czas.sen (2)
Z wyjątkiem klawiatury
oglądać.zatrzymywać się()
oglądać.dołączyć()
monitor()

Zaczynamy od zaimportowania wymaganych modułów, w tym Watchdog. Następnie tworzymy prostą funkcję monitorowania i ustawiamy konfigurację, taką jak format wyjściowy i data. Następnie ustawiamy argumenty ścieżki katalogu.

Następnie poruszamy się, aby utworzyć obiekt obserwatora i ustawić go do rekurencyjnego monitorowania zmian w określonym katalogu, chyba że napotkano przerwanie klawiatury (CTRL + C)

Na koniec wywołujemy funkcję i uruchamiamy skrypt. Otrzymasz wyjście, jak pokazano poniżej:

Wniosek

Korzystając z tego samouczka, stworzyliśmy prosty skrypt, który monitoruje zmiany w katalogu i stale rejestruje je na konsolę.