python 모니터링 logcat 키워드 기능

본 고 는 주로 Python 에서 ADB 명령 을 호출 하여 실시 간 으로 logcat 키 워드 를 감시 하 는 기능 을 소개 한다.
다 중 프로 세 스 를 사용 하여 여러 장 치 를 동시에 감시 하고 여러 키 워드 를 감시 할 수 있 습 니 다.
ADB 환경 을 설정 해 야 합 니 다.구체 적 인 설정 은 소개 가 많 지 않 습 니 다.아무 거나 찾 아 보고 코드 를 직접 올 립 니 다.
전역 변수 제 어 를 통 해 모니터링 기능 을 켜 고 닫 습 니 다.INSTRUCTION 은 명령 에 따라 대응 하 는 방법 명 을 가 져 오 는 데 사 용 됩 니 다.

import os, threading, datetime
 
#           ,   LOG  
LOG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "log")
 
#           
KEYWORDS = ["ANR ", "NullPointerException", "CRASH", "Force Closed"]
 
#        
STOP_LOGCAT = True
 
#         
INSTRUCTION = {
    "1": "filter_keywords",
    "2": "stop_filter_keywords",
    "3": "exit"
    }
 
def filter_keywords():
 global STOP_LOGCAT
 STOP_LOGCAT = False
 devices = get_devices() #           
 print("       ")
 for device in devices:
  t = threading.Thread(target=filter_keyword, args=(device,))
  t.start()
 
def stop_filter_keywords():
 global STOP_LOGCAT
 if STOP_LOGCAT:
  print("         
") else: STOP_LOGCAT = True print("
")
키워드 주 함수 모니터링,

def filter_keyword(device):
 print("  %s        " % str(device))
 sub = logcat(device)
 with sub:
  for line in sub.stdout: #           ,      .stdout      
   for key in KEYWORDS:
    if line.decode("utf-8").find(key) != -1: # stdout       ,    
     message = "  :%s    :%s
" % (device, key)# :192.168.56.104:5555 :ANR path = get_log_path("bugreport") # bugreport(device, path)# send_message(message) # , if STOP_LOGCAT: break print(" %s " % str(device)) sub.kill()
subprocess.Popen 을 통 해 프로 세 스 실행 명령 을 만 들 고 stdout 으로 로 그 를 계속 출력 합 니 다.

# logcat      
def logcat(device):
 command = "adb -s " + str(device) + " logcat -v time"
 sub = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 return sub
연 결 된 모든 장 치 를 가 져 오 는 방법 입 니 다."adb devices"를 실행 한 후 다음 과 같이 출력 합 니 다.명령 을 실행 한 문자열 절단 을 통 해 모든 장치 번 호 를 목록 으로 저장 합 니 다.

#     device
def get_devices():
 command = "adb devices"
 res = os.popen(command).read()
 devices = []
 res = res.split("
") for i in res: if i.endswith("device"): devices.append(i.split('\t')[0]) return devices

#              
def bugreport(device, path):
 os.chdir(path)# bugreport           ,               
 command = "adb -s " + str(device) + " bugreport"
 subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=-1)
 print("  :%s     :%s" % (str(device), path))
이로써  현재 파일 이 있 는 디 렉 터 리/년/월/일 형식 으로 로그 경 로 를 가 져 옵 니 다.자동 으로 생 성 되 지 않 으 면

#         ,           
def get_log_path(tag):
 year = datetime.datetime.now().strftime('%Y')
 month = datetime.datetime.now().strftime('%m')
 day = datetime.datetime.now().strftime('%d')
 path = os.path.join(LOG_PATH, tag, year, month, day)
 if not os.path.exists(path):
  os.makedirs(path)
 return path
main 함수,순환 수신 명령,수신 명령 에 따라 방법 명 을 얻 고 eval()방법 으로 실행 합 니 다.

def main():
 while True:
  print("-" * 100)
  print("1:       
2:
3: ") print("-" * 100) instruction = str(input("


")) print("-" * 100) while instruction not in INSTRUCTION.keys(): instruction = str(input("

, :")) if int(instruction) == 9: exit() # TODO monkey eval(INSTRUCTION[str(instruction)] + "()") if __name__ == '__main__': main()
로그 모니터링 과 닫 는 방법 만 적 혀 있 습 니 다.중간 에 일부 처 리 는 자신의 수요 에 따라 이 루어 질 수 있 습 니 다.예 를 들 어 키 워드 를 감지 한 후에 모든 로 그 를 끌 어 내 는 것 을 제외 하고 메 일,못 같은 통 지 를 보 내 고 자신의 수요 에 따라 이 루어 질 수 있 습 니 다.
총결산
python 모니터링 logcat 키워드 기능 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python 모니터링 logcat 키워드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기