Python+Flask를 사용하여 웹 페이지의 실시간 업데이트 및 로그 표시를 구현하는 방법
1. 로그를 파일로 출력
logging
모듈을 사용하여 사용자 정의 레벨 로그를 생성하고 지정된 경로에 로그를 출력합니다.
로그 레벨: 디버그(디버그 로그)
1.캡슐화 로그 출력 방법()
import logging as lg import os class logging_(): def __init__(path,delete=True) self.path = path #日志文件存放位置 name = 'log.log' #日志文件名称 self.log_ = os.path.join(self.path,name) #进入文件目录 if delete == True: open(f"{path}/{name}","w").close #为True时清空文本 # 创建一个日志处理器 self.logger = lg.getLogger('logger') # 设置日志等级,低于设置等级的日志被丢弃 self.logger.setLevel(lg.DEBUG) # 设置输出日志格式 self.fmt = lg.Formatter("[%(asctime)s] - %(levelname)s: %(message)s","%Y-%m-%d %H:%M:%S") # 创建一个文件处理器 self.fh = lg.FileHandler(self.log_,encoding='utf-8') # 设置文件输出格式 self.fh.setFormatter(self.fmt) # 将文件处理器添加到日志处理器中 self.logger.addHandler(self.fh) # 创建一个控制台处理器 self.sh=lg.StreamHandler() # 设置控制台输出格式 self.sh.setFormatter(self.fmt) # 将控制台处理器添加到日志处理器中 self.logger.addHandler(self.sh) # 关闭文件 self.fh.close() # 使用 if __name__ == '__main__': _path = os.paht.dirname(__file__) # 获取当前文件的路径 lg = logging_(_path).logger # 实例化封装类 lg.info('1111') lg.debug('2222') lg.error('33333') lg.warning('44444')
로그 파일이 추가로 출력됩니다. 현재 파일 디렉터리:
로그 내용:
2. 로그 생성 및 로그 읽기
1. 사용자 정의된 파일 이름으로 새 py 파일(세대_log)을 생성합니다.
2. 코드
# 导入上面封装好的日志输出 from logging.demo_01 import logging_ import os,time _path = os.path.dirname(__file__) # 获取当前文件路径 lg = logging_(_path) # 实例化类 # 创建方法生成日志 def generation_log(): for i in range(20): lg.info(i) time.sleep(1) # 读取日志并返回 def red_logs(): log_path = f'{_path}/log.log' # 获取日志文件路径 with open(log_path,'rb') as f: log_size = path.getsize(log_path) # 获取日志大小 offset = -100 # 如果文件大小为0时返回空 if log_size == 0: return '' while True: # 判断offset是否大于文件字节数,是则读取所有行,并返回 if (abs(offset) >= log_size): f.seek(-log_size, 2) data = f.readlines() return data # 游标移动倒数的字节数位置 data = f.readlines() # 判断读取到的行数,如果大于1则返回最后一行,否则扩大offset if (len(data) > 1): return data else: offset *= 2
3. Flask는 웹 서비스를 만듭니다
Flask는 무엇을 하나요? 지금은 설명하지 않겠습니다. 관심이 있으시면 Baidu를 이용하시거나 제 업데이트를 기다리시면 됩니다. 간단한 웹 페이지를 빠르게 구현하려면
1. 디렉토리 app.py 파일을 생성하고 다음 코드를 입력하세요
#导入flask模块 from flask import Flask,request,render_template # 导入日志生成和日志返回方法 from study.logging.generation_log import generation_log,red_logs app = Flask(__name__) line_number = [0] #存放当前日志行数 # 定义接口把处理日志并返回到前端 @app.route('/get_log',methods=['GET','POST']) def get_log(): log_data = red_logs() # 获取日志 # 判断如果此次获取日志行数减去上一次获取日志行数大于0,代表获取到新的日志 if len(log_data) - line_number[0] > 0: log_type = 2 # 当前获取到日志 log_difference = len(log_data) - line_number[0] # 计算获取到少行新日志 log_list = [] # 存放获取到的新日志 # 遍历获取到的新日志存放到log_list中 for i in range(log_difference): log_i = log_data[-(i+1)].decode('utf-8') # 遍历每一条日志并解码 log_list.insert(0,log_i) # 将获取的日志存放log_list中 else: log_type = 3 log_list = '' # 已字典形式返回前端 _log = { 'log_type' : log_type, 'log_list' : log_list } line_number.pop() # 删除上一次获取行数 line_number.append(len(log_data)) # 添加此次获取行数 return _log # 通过前端请求执行生成日志方法 @app.route('/generation_log',methods=['GET','POST']) def generation_log_(): if request.method == 'POST': generation_log() return '' @app.route('/',methods=['GET','POST']) def index(): if request.method == 'GET': return render_template('index.html') if request.method == 'POST': return render_template('index.html') if __name__ == "__main__": app.run(debug=True) #启动web服务
2. 디렉토리에 템플릿 디렉토리를 생성합니다.
3. template 디렉토리에 파일을 저장하고 다음 프런트엔드 코드를 입력하세요
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body{ margin: auto; background-color: #f5f5f5; } .button{width: 200px;height: 50px;color:#FFFFFF;background-color: #1da1f2} .log{ width: 98%; height: 500px; background-color: #FFFFFF; margin: 0 auto; margin-top: 10px; padding-top: 30px; padding-bottom: 40px; } .log_text{ height: 500px; margin-left: 80px; font-size: 18px; color: #111111; overflow-x: hidden; overflow-y: auto; } </style> </head> <body> <button id="button" class="button">开始</button> <div class="log"> <div class="log_text" id='log_list'> <div id="log_text"></div> </div> </div> </body> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script> var time // 创建一个元素节点 function insertAfter( newElement, targetElement ){ // newElement是要追加的元素targetElement 是指定元素的位置 var parent = targetElement.parentNode; // 找到指定元素的父节点 parent.appendChild( newElement, targetElement ); }; function log(){ clearTimeout(time) // 清空定时器 var log_null = 0 //存放空日志次数 var div = document.getElementById('log_list') //找到存放日志的块 div.innerHTML = "<div id='log_text'></div>" // 每次跑清空div内内容 $.post('/generation_log',{},function (){ }) //请求生成日志接口 // 生成定时器 time = setInterval(function (){ $.get('/get_log',{},function (data){ //请求获取日志接口获取日志 if (data.log_type == 3){ //如果获取的是空日志log_null次数加1 log_null ++ if (log_null >= 5){ clearTimeout(time) //如果连续10次获取的都是空日志清除定时任务 } return } if (data.log_type == 2){ //如果获取到新日志 for (i=0;i<data.log_list.length;i++){ //遍历日志 var p = document.createElement("p") //生成一个p标签 p.innerHTML = data.log_list[i] //日志存放到P标签内 var header = document.getElementById('log_text') insertAfter(p,header) //将p标签添加到log_text div中 div.scrollTop = div.scrollHeight //滚动条实时显示到底部 } log_null = 0 //日志为空次数清0 } }) },1000) //每1秒钟执行一次 } document.getElementById('button').addEventListener("click",log) //点击开始按钮开始执行 </script> </html>
4. 서비스를 시작하세요
1. 프로젝트 디렉토리에서 코드가 완성되었는지 확인하세요
2. .py 파일
3. 로컬 연결에 액세스합니다: http://127.0.0.1: 5000/
4. 시작하려면 클릭하세요.
위 내용은 Python+Flask를 사용하여 웹 페이지의 실시간 업데이트 및 로그 표시를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT
더 현명한 결정을 위한 AI 기반 투자 연구

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

종속성 패키지를 설치하려면 pipinstall-rrequirements.txt를 실행하십시오. 충돌을 피하고, 파일 경로가 올바른지 확인하고 PIP가 업데이트되었는지 확인하고 필요한 경우 설치 동작을 조정하기 위해-no-deps 또는 --user와 같은 옵션을 사용하는 것이 좋습니다.

theargparsemoduleisecomedendedway handlecommand-lineargumentsinpython, robustparsing, typevalidation, helpmessages, anderrorhandling; audys.argvforsimplecaseSrequiringMinimalSetup을 제공합니다.

Python은 Python의 간단하고 강력한 테스트 도구입니다. 설치 후 테스트 파일은 이름 지정 규칙에 따라 자동으로 발견됩니다. 어설 션 테스트를 위해 test_로 시작하여 기능을 작성하고 @pytest.fixture를 사용하여 재사용 가능한 테스트 데이터를 생성하고 pytest.raises를 통해 예외를 확인하고 지정된 테스트 실행 및 여러 명령 줄 옵션을 지원하며 테스트 효율성을 향상시킵니다.

데이터 과학의 초보자에게는 "경험"에서 "업계 전문가"로의 도약의 핵심은 지속적인 실습입니다. 실습의 기초는 풍부하고 다양한 데이터 세트입니다. 다행히 인터넷에는 무료 공개 데이터 세트를 제공하는 많은 웹 사이트가 있으며 기술을 향상시키고 기술을 연마하는 데 유용한 리소스입니다.

목차 비트 코인 개선 제안 (BIP)이란 무엇입니까? BIP가 왜 그렇게 중요한가? 역사적 BIP 프로세스는 비트 코인 개선 제안 (BIP)에 어떻게 효과가 있습니까? BIP 유형 신호는 무엇이며 광부는 어떻게 보내나요? BITCOIN 개선 제안 또는 "BIP"라는 시스템을 통해 2011 년부터 BIP 결론에 대한 빠른 시험의 Taproot 및 Cons는 2011 년부터 개선되었습니다. 비트 코인 개선 제안 (BIP)은 비트 코인이 일반적으로 어떻게 발전 할 수 있는지에 대한 지침을 제공하며, 두 가지 유형의 BIP가 있습니다. 그 중 두 가지 유형은 비트 코인의 기술 변화와 관련이 있습니다.

빅 데이터 분석은 멀티 코어 CPU, 대용량 메모리 및 계층 스토리지에 중점을 두어야합니다. 코어 수와 단일 코어 성능을 고려하여 Amdepyc 또는 Ryzenthreadripper와 같은 멀티 코어 프로세서가 선호됩니다. 메모리는 64GB로 시작하는 것이 좋습니다. 데이터 무결성을 보장하기 위해 ECC 메모리가 권장됩니다. 스토리지는 NVMESSD (시스템 및 핫 데이터), SATASSD (공통 데이터) 및 HDD (콜드 데이터)를 사용하여 전반적인 처리 효율을 향상시킵니다.

import@contextManagerFromContextLibandDefineAgeneratorFunctionThatYieldSActlyOnce, whereCodeBeforeYieldActSasEnterAndErandCodeftertyield (바람직하게는) ACTSAS__EXIT __

repetitivetasksworthautomating, suchasorganizingfileSordingEmails, succurnificernificanttime.2.useappropriatepythonlibraries -libraries -libraries likeos, shutil, glob, smtplib, beautifulsoup, andseleniumforfileoperations, w
