2011-09-26 7 views
1

로그가 기록 될 때 로그 파일의 마지막 줄을 읽는 코드 조각이 있습니다. 로그에 발생한 오류를 인쇄하려면 기본적으로 line.startswith('Error')을 인쇄하고 line.startwith('End of Error') 일 때 인쇄를 시작하십시오. 내 코드는 아래에 있습니다. 아무도 이걸로 제발 도와 줄 수 없습니까?파이썬에서 로그 파일을 읽고 특정 텍스트를 출력합니다.

log = 'C:\mylog.log' 
file = open(log, 'r') 
res = os.stat(log) 
size = res[6] 
file.seek(size) 

while 1: 
    where = file.tell() 
    line = file.readline() 
    if not line: 
     time.sleep(1) 
     file.seek(where) 
    else: 
     if line.startswith('Error'): 
     #print lines until you come to 'End of Error' 
+0

순간 무엇을 작동하지 않는 이유는 무엇입니까? 오류는 어디에 있습니까? 스크립트를 실행할 때 무엇을 얻으며 무엇을 기대 했습니까? –

+0

"if line.startswith ('Error')"행 다음에 '오류 끝' –

답변

1

는 루프 전에 플래그를 초기화 필요에 따라

in_error = False 

그런 다음 ON과 OFF로 전환 :

if line.startswith('Error'): 
    in_error = True 
elif line.startswith('End of Error'): 
    print(line) 
    in_error = False 
if in_error: 
    print(line) 
+0

그 덕분에, 대단히 감사합니다. –

0

단순히 tail -F (GNU 플랫폼에서 사용할 수도 F를) 실행하는 subprocess 모듈을 사용하고 출력을 처리하는 것이 더 쉬울 수 있습니다.

+0

'subprocess'가 아닌'multiprocessing'이 될 때까지 줄을 출력 할 코드를 삽입하고 싶습니다. – agf

+0

동의하거나 단순히 파이썬 프로세스의 표준 출력으로 파이핑하는 것을 고려해보십시오. 'tail -f | .py'. 물론 로그 파일 위치에 따라 플랫폼이 Windows 인 것처럼 보입니다. – dicato

관련 문제