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
모듈에서 테일을 실행할 수 있습니다.
무한 루프를 수행하고 출력 라인을 표시하려면 파일 이름과 _iter
를 True
로 설정하여 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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn