Tôi đang cố gắng tìm một cách hay để đọc tệp nhật ký trong thời gian thực bằng cách sử dụng python. Tôi muốn xử lý các dòng từ một tệp nhật ký tại một thời điểm khi nó được viết. Bằng cách nào đó tôi cần phải cố gắng để đọc các tập tin cho đến khi nó được tạo ra và sau đó tiếp tục xử lý dòng cho đến khi tôi chấm dứt quá trình. Có cách nào thích hợp để làm việc này không? Cảm ơn.Đọc từ tệp nhật ký vì nó đang được viết bằng python
Trả lời
Bạn có thể thử với một cái gì đó như thế này:
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
Ví dụ được chiết xuất từ here.
Điều này có vẻ là làm việc nhưng nó sẽ không cho phép tôi tạo ra các đối tượng hoặc ghi vào cơ sở dữ liệu cùng một lúc trong ứng dụng django của tôi. Tôi không thấy lý do rõ ràng cho việc này; có sửa chữa đơn giản không? – Anon
Tôi không biết. Bạn nên đăng một số mã trong một câu hỏi riêng để nhận câu trả lời cho câu hỏi này, tôi đoán vậy. Tôi không thấy bất kỳ lý do nào để không cập nhật cơ sở dữ liệu nếu bạn đặt mã đó bên trong cơ sở dữ liệu này ... –
Hãy làm việc này nhưng tôi phải xáo trộn chuỗi trước khi tôi có thể viết nó vào cơ sở dữ liệu của mình. Cảm ơn. – Anon
Có lẽ bạn có thể làm một cuộc gọi hệ thống để
tail -f
sử dụng os.system()
Hãy xem this PDF bắt đầu từ trang 38, ~ trượt I-77 và bạn sẽ tìm thấy tất cả thông tin bạn cần. Tất nhiên phần còn lại của các slide là tuyệt vời, quá, nhưng những đối phó cụ thể với vấn đề của bạn:
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
Đáng chú ý rằng điều này sẽ bỏ qua bất kỳ nội dung nào đã có trong tệp nhật ký, chỉ in các mục "mới" được tạo sau khi trình lặp này được tạo. Ngoài ra PDF thực sự là một mỏ vàng;) – blented
Vì đây là Python và ghi nhật ký được gắn thẻ, có một khả năng khác để thực hiện việc này.
Tôi giả định điều này dựa trên trình ghi nhật ký Python, ghi nhật ký.Handler.
Bạn chỉ có thể tạo ra một lớp mà được sự (tên) Ví dụ logger và ghi đè lên emit
chức năng để đưa nó vào một giao diện (nếu bạn cần điều khiển chỉ cần thêm một handler console để xử lý tập tin)
Ví dụ:
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)
Tôi hiện đang sử dụng mã tương tự để thêm TkinterTreectrl.Multilistbox để xem đầu ra nhật ký khi chạy.
Off-Side: Trình ghi nhật ký chỉ nhận dữ liệu ngay sau khi được khởi tạo, vì vậy nếu bạn muốn có sẵn tất cả dữ liệu, bạn cần khởi chạy nó ngay từ đầu. (Tôi biết đây là những gì được mong đợi, nhưng tôi nghĩ rằng nó là giá trị được đề cập.)
- 1. Đọc tệp Python + Viết
- 2. Viết chỉ chắp thêm tệp nhật ký đã được nén trong Python
- 3. Đọc dữ liệu từ một tệp nhật ký dưới dạng một ứng dụng riêng biệt được ghi vào nó
- 4. Ghi nhật ký bằng Python từ nhiều quá trình
- 5. Cách đọc tệp nhật ký innodb?
- 6. Đọc các tệp nhật ký khi chúng được cập nhật trong Go
- 7. log4Net tệp nhật ký không viết
- 8. Ghi nhật ký bằng Python từ nhiều chủ đề
- 9. Phân tích nhật ký bằng Python
- 10. Cách khóa tệp và tránh đọc trong khi đang viết
- 11. Viết/Đọc cho Nhật ký Sự kiện Windows
- 12. Cách viết và đọc tệp bằng HashMap?
- 13. Ghi nhật ký bằng Python - kiểm tra vị trí của tệp nhật ký?
- 14. Ký tự cuối dòng từ dòng được đọc từ tệp văn bản, sử dụng Python
- 15. Viết vào một tệp nhật ký trong ASP.NET
- 16. Đọc một tệp MIDI bằng Python
- 17. Định dạng để viết tệp nhật ký JSON?
- 18. Python: xóa một tệp nhật ký
- 19. Đọc tệp nhật ký bị khóa bởi ứng dụng khác
- 20. tệp nhật ký phân tích cú pháp python
- 21. Đọc nhật ký từ Log4Net được tạo bởi nhiều chủ đề
- 22. Tạo nhật ký đọc hiệu quả
- 23. Đọc tệp Rùa/N3 RDF bằng Python
- 24. Đọc/Viết Tệp nhị phân
- 25. Nhật ký lỗi đọc Android từ điện thoại
- 26. Đọc các tệp * .wav bằng Python
- 27. Đọc từ ký tự tệp văn bản theo ký tự
- 28. Cách đọc tệp nhật ký hệ thống trong Android?
- 29. Đọc các tệp bmp bằng Python
- 30. Đọc các tệp chứng chỉ từ bộ nhớ thay vì tệp bằng OpenSSL
Điều này cũng tốt ... Tôi nghĩ rằng nó phù hợp với tiêu chí của bạn tốt và cung cấp một lớp học có thể được mở rộng dễ dàng. [http://code.activestate.com/recipes/577968-log-watcher-tail-f-log/](http://code.activestate.com/recipes/577968-log-watcher-tail-f-log /) – mogga