Python - 로그 파일 추적 및 차단 및 비차단 테일 기능 비교

Zeeshan Afridi 2023년6월21일
  1. Python tail() 함수 개요
  2. Python에서 로그 파일 추적
  3. Python의 차단 및 비 차단 Tail() 함수
  4. 위의 예에 대한 로그 파일
Python - 로그 파일 추적 및 차단 및 비차단 테일 기능 비교

오늘의 튜토리얼은 Python의 tail() 기능에 대한 개요를 제공하여 로그 파일을 추적하는 방법에 대한 작업 및 데모를 제공합니다.

또한 Python의 차단 및 비차단 테일 함수를 비교하고 차이점을 강조 표시합니다.

Python tail() 함수 개요

Python에서는 tail() 함수를 사용할 때 기본적으로 데이터 프레임의 마지막 5개 행이 표시됩니다. 행 수인 하나의 입력 매개변수만 있습니다.

이 옵션을 사용하면 특정 양의 행을 표시할 수 있습니다. 또한 tail() 함수는 아래 예제와 같이 음수도 허용합니다.

이러한 상황에서는 모든 행이 반환되지만 첫 번째 행은 반환되지 않습니다. head()tail()의 주요 차이점은 빈 매개변수가 전달될 때 head()tail()이 모두 5개의 행을 반환한다는 것입니다.

head()tail() 함수는 정렬된 데이터를 생성하는 반면 sample()은 정렬되지 않은 데이터를 생성합니다.

tail() 함수 구문:

dataframe.tail(n=5)

Python에서 Tail() 함수 작업

n의 음수 값을 tail() 함수에 전달하면 첫 번째 n이 제외됩니다(다음 예 참조).

print(df.tail(2))를 실행하면 마지막 두 행이 표시되고 print(df.tail(-6))를 실행하면 처음 6개를 제외한 모든 행이 표시됩니다.

예제 코드:

import pandas as pd

df = pd.DataFrame(
    {
        "Colours": [
            "Purple",
            "White",
            "Black",
            "Brown",
            "Pink",
            "Orange",
            "Blue",
            "Red",
            "Yellow",
        ]
    }
)
print("Complete Data Frame:")
print(df)

print("When we pass the value of `n`:")
print(df.tail(2))

print("\nWhen we pass the -ve value of `n`:")
print(df.tail(-6))

출력:

Complete Data Frame:
   Colours
0  Purple
1   White
2   Black
3   Brown
4    Pink
5  Orange
6    Blue
7     Red
8  Yellow

When we pass the value of `n`:
   Colours
7     Red
8  Yellow

When we pass the -ve value of `n`:
   Colours
6    Blue
7     Red
8  Yellow

Python에서 로그 파일 추적

아래 출력에서 볼 수 있는 일부 데이터를 저장한 std.log라는 로그 파일을 만들었습니다. 로그 파일을 테일링하려면 sh 모듈에서 테일을 실행할 수 있습니다.

무한 루프를 수행하고 출력 라인을 표시하려면 파일 이름과 _iterTrue로 설정하여 tail()을 호출합니다.

예제 코드:

from sh import tail

for line in tail("-f", "std.log", _iter=True):
    print(line)

출력:

2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break

Python의 차단 및 비 차단 Tail() 함수

논블로킹 tail() 함수부터 시작하겠습니다.

논블로킹 Tail() 함수

기능이 차단되면 잠재적으로 후속 활동의 완료를 연기할 수 있습니다. 또한 시스템의 전반적인 성능이 저하될 수 있습니다.

즉, 프로그램이 실행을 차단하고 차단합니다. subprocess를 실행하고 출력 스트림에 연결하기 위해 subprocess 모듈(stdout)을 활용하고 있습니다.

예제 코드:

import subprocess
import select
import time

f = subprocess.Popen(
    ["tail", "-F", "log.txt"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
p = select.poll()
p.register(f.stdout)

while True:
    if p.poll(1):
        print(f.stdout.readline())
    time.sleep(1)

출력:

b'2022-08-25 21:44:10,045 This is just a reminder\n'

Tail() 함수 차단

다음 코드는 추가될 때 새 줄도 표시하지만 추가 select 모듈 호출 없이 subprocess 모듈을 활용할 수 있습니다. f.kill() 명령으로 꼬리 프로그램이 종료될 때까지 차단됩니다.

예제 코드:

import subprocess

f = subprocess.Popen(
    ["tail", "-F", "log.txt"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
while True:
    line = f.stdout.readline()
    print(line)

출력:

b'2022-08-25 21:44:10,045 This is just a reminder\\n'
b'2022-08-25 21:44:10,046 Meeting is at 2 pm\\n'

위의 예에 대한 로그 파일

다음 코드는 차단 및 비차단 코드에서 사용되는 log.txt를 생성하기 위한 것입니다.

예제 코드:

import logging
logging.basicConfig(filename="log.txt", level=logging.DEBUG,
                    format="%(asctime)s %(message)s")
logging.debug("This is just a reminder")
logging.info("Meeting is at 2 pm")
logging.info("After the lunch break")

출력:

2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn