Передача хвостов журналов в PythonPython

Программы на Python
Ответить
Anonymous
 Передача хвостов журналов в Python

Сообщение Anonymous »

У меня есть несколько файлов журналов, которые я хотел бы просмотреть. Это так же просто, как: busybox Tail -Fq -n 0, но когда я попытаюсь передать вывод файлов в скрипт Python, будет выполнено первоначальное считывание (если я не использую -q), но больше ничего не распечатает.

Код: Выделить всё

import sys

try:
data = ""
while True:
data += sys.stdin.read(1)
if data.endswith("\n"):
print(f"Py Readout: {data}")
data = ""
except Exception as e:
print("Exception caught")
Здесь я тестировал постепенно
1. Выполнение базового хвоста сверху работает и выводит на стандартный вывод.
2- давайте возьмем это и перенесем в Python:

Код: Выделить всё

busybox tail -F -n 0 MyLogs/*.txt | python3 test.py
Все файлы будут выгружены, как и ожидалось. но когда он обновляется, он не получает дополнительную распечатку от Python. Я заметил, что оператор While зацикливается, поэтому кажется, что он ожидает ввода.
В конце концов я сделаю хвост с -Fq, чтобы он не выгружал заголовок файла. информацию, когда я смогу подтвердить, что это работает правильно.
Я думал, что при появлении хвоста он будет выводиться на стандартный вывод, а затем Python продолжит его подхватывать. Должен ли я использовать это, делая что-то еще?
Другой вариант, который я думал, — заставить Python прослушивать порт, а затем инициализировать функционал Tail и вывести эту информацию в прослушиваемый порт.
Я знаю, что существуют приложения, которые обрабатывают подобные вещи, но я пытаюсь объединить всю обработку хвостатых журналов в Python. Со временем я заменю print методом, который будет обрабатывать строку и делать с ней то, что нужно.
Способ, который работает, но не уверен, что он мне понравится:
Создайте и запустите следующий скрипт Python:

Код: Выделить всё

import socket

def run_server():
# create a socket object
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_ip = "127.0.0.1"
port = 5555

# bind the socket to a specific address and port
server.bind((server_ip, port))
# listen for incoming connections
server.listen(0)
print(f"Listening on {server_ip}:{port}")

# accept incoming connections
client_socket, client_address = server.accept()
print(f"Accepted connection from {client_address[0]}:{client_address[1]}")

# receive data from the client
while True:
request = client_socket.recv(1024).decode("utf-16")
print(f"Raw: {request}")
#request = request.decode("utf-8") # convert bytes to string

# if we receive "close" from the client, then we break
# out of the loop and close the conneciton
if request.lower() == "close":
# send response to the client which acknowledges that the
# connection should be closed and break out of the loop
client_socket.send("closed".encode("utf-8"))
break

print(f"Received: {request}")

response = "accepted".encode("utf-8") # convert string to bytes
# convert and send accept response to the client
client_socket.send(response)

# close connection socket with the client
client_socket.close()
print("Connection to client closed")
# close server socket
server.close()

run_server()
Когда я запускаю это, он открывает порт и прослушивает 5555. После этого я просто передаю все это через nc.

Код: Выделить всё

busybox tail -Fq -n 0 Chatlogs/*.txt | busybox nc 127.0.0.1 5555
Это работает, но я надеялся, что есть способ, не использующий порты, и я мог бы просто напрямую подключиться к сценарию Python.

Подробнее здесь: https://stackoverflow.com/questions/790 ... nto-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»