Próbuję znaleźć dobry sposób na odczytanie pliku dziennika w czasie rzeczywistym za pomocą Pythona. Chciałbym przetwarzać linie z pliku dziennika pojedynczo podczas jego zapisywania. Wciąż muszę próbować czytać plik, dopóki go nie utworzy, a następnie kontynuować przetwarzanie linii, dopóki nie zakończę procesu. Czy istnieje odpowiedni sposób na zrobienie tego? Dzięki.Odczytaj z pliku dziennika zapisanego przy użyciu pythona
Odpowiedz
można spróbować z czymś takim:
import time
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line, # already has newline
Przykład ekstrahowano z here.
To wydaje się działać, ale nie pozwoli mi tworzyć obiektów ani pisać do bazy danych w tym samym czasie w mojej aplikacji django. Nie widzę żadnego oczywistego powodu; czy istnieje prosta naprawa? – Anon
Nie wiem. Powinieneś opublikować kod w osobnym pytaniu, aby uzyskać odpowiedzi na ten temat. Nie widzę powodu, aby nie aktualizować bazy danych, jeśli umieścisz ten kod wewnątrz tego ... –
Mam to do roboty, ale musiałem dużo zepsuć, zanim zdołałem napisać do mojej bazy danych. Dzięki. – Anon
Może można zrobić wywołanie systemowe do
tail -f
użyciu os.system()
Spójrz na this PDF zaczynając od strony 38 ~ slajd I-77, a znajdziesz wszystko potrzebne informacje. Oczywiście reszta slajdy są niesamowite, zbyt, ale te konkretnie zajmować problemu:
import time
def follow(thefile):
thefile.seek(0,2) # Go to the end of the file
while True:
line = thefile.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
yield line
Warto zauważyć, że pominie to zawartość już zawartą w pliku dziennika, a jedynie drukuje "nowe" wpisy utworzone po utworzeniu tego iteratora. Także ten PDF naprawdę jest kopalnią złota;) – blented
Ponieważ jest to oznaczenie Python i logowanie, istnieje inna możliwość, aby to zrobić.
Zakładam, że jest to oparte na logarytmie Pythona, opartym na logging.Handler.
Można po prostu utworzyć klasę, która dostaje (nazwie) instancji rejestratora i zastąpić funkcję emit
umieścić go na GUI (jeśli trzeba konsolę wystarczy dodać obsługi konsoli do obsługi plików)
przykładu:
import logging
class log_viewer(logging.Handler):
""" Class to redistribute python logging data """
# have a class member to store the existing logger
logger_instance = logging.getLogger("SomeNameOfYourExistingLogger")
def __init__(self, *args, **kwargs):
# Initialize the Handler
logging.Handler.__init__(self, *args)
# optional take format
# setFormatter function is derived from logging.Handler
for key, value in kwargs.items():
if "{}".format(key) == "format":
self.setFormatter(value)
# make the logger send data to this class
self.logger_instance.addHandler(self)
def emit(self, record):
""" Overload of logging.Handler method """
record = self.format(record)
# ---------------------------------------
# Now you can send it to a GUI or similar
# "Do work" starts here.
# ---------------------------------------
# just as an example what e.g. a console
# handler would do:
print(record)
obecnie używam podobny kod, aby dodać TkinterTreectrl.Multilistbox do oglądania wyjście rejestratora przy starcie.
Off-Side: Rejestrator pobiera dane dopiero po zainicjowaniu, więc jeśli chcesz mieć wszystkie dostępne dane, musisz je zainicjować na samym początku. (Wiem, że to jest oczekiwane, ale myślę, że warto o tym wspomnieć.)
- 1. powtarzanie pliku przy użyciu Pythona
- 2. Zapisywanie obrazu zapisanego na s3 przy użyciu pliku node.js?
- 3. Odczytaj zdalny plik .csv przy użyciu opencsv
- 4. Przekierowywanie danych wyjściowych do pliku dziennika przy użyciu pliku node.js
- 5. Zapisywanie pliku Matlab przy użyciu Pythona
- 6. Jak opróżnić pliku przy użyciu Pythona
- 7. Jak wywołać skrypt Pythona wewnątrz pliku jar przy użyciu Pythona?
- 8. Tworzenie ruchomego płaskiego pliku dziennika przy użyciu biblioteki Enterprise
- 9. Transakcja wycofania przy użyciu dziennika transakcji
- 10. Jak zaimplementować automatyczną archiwizację pliku dziennika przy użyciu Log4Net
- 11. Pobieranie pliku z wiersza poleceń przy użyciu pythona
- 12. Pisanie kropli z SQLite do pliku przy użyciu Pythona
- 13. Jak wyodrębnić audio z pliku wideo przy użyciu Pythona?
- 14. Parsowanie zwykłego pliku tekstowego do pliku CSV przy użyciu Pythona
- 15. przy użyciu Pythona 2.6?
- 16. Odczytaj pliki certyfikatów z pamięci zamiast z pliku przy użyciu OpenSSL
- 17. Odczytaj plik z serwera za pomocą ssh za pomocą pythona
- 18. Tworzenie SVG przy użyciu Pythona
- 19. Jak używać dziennika toczenia przy użyciu log4c?
- 20. C# - Zapisywanie dziennika przy użyciu pola tekstowego
- 21. Uzyskiwanie danych z PubMed przy użyciu Pythona
- 22. przy użyciu Pythona 3 z AWS lambda
- 23. Wyszukiwanie zapisanego pliku na symulatorze?
- 24. Sprawdzanie istnienia pliku na zdalnym serwerze SSH przy użyciu Pythona
- 25. Odczytaj jeden bajt z dużego pliku
- 26. Grunt - odczytaj obiekt json z pliku
- 27. Hocon: Odczytaj tablicę obiektów z pliku konfiguracyjnego
- 28. Ustaw bit wykonania dla pliku przy użyciu pythona
- 29. Jak korzystać z rejestrowania za pomocą pliku Pythona i konfigurowania pliku pliku dziennika
- 30. Odczytaj plik właściwości pod ścieżką klasy przy użyciu scala
Ten też jest dobry ... Myślę, że pasuje on do twoich kryteriów i zapewnia klasę, którą można łatwo rozszerzyć. [http://code.activestate.com/recipes/577968-log-watcher-tail-f-log/](http://code.activestate.com/recipes/577968-log-watcher-tail-f-log /) – mogga