• <nav id="0e2wv"><fieldset id="0e2wv"></fieldset></nav><button id="0e2wv"><style id="0e2wv"><acronym id="0e2wv"></acronym></style></button>
    <pre id="0e2wv"></pre>
  • \n開始<\/button>\n\n    \n        <\/div>\n    <\/div>\n<\/div>\n<\/body>\n\n

    亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

    目錄
    一、日誌輸出到檔案
    首頁(yè) 後端開發(fā) Python教學(xué) 如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    May 17, 2023 am 11:07 AM
    python web flask

    一、日誌輸出到檔案

    使用模組:logging

    #可以產(chǎn)生自訂等級(jí)日誌,可以輸出日誌到指定路徑
    日誌等級(jí):debug(偵錯(cuò)日誌)

    #1、封裝日誌輸出方法()

    import logging as lg
    import os
    
    class logging_():
        def __init__(path,delete=True)
            self.path = path #日志文件存放位置
            name = &#39;log.log&#39; #日志文件名稱
            self.log_ = os.path.join(self.path,name) #進(jìn)入文件目錄
            if delete == True:
                open(f"{path}/{name}","w").close #為True時(shí)清空文本
            # 創(chuàng)建一個(gè)日志處理器
            self.logger = lg.getLogger(&#39;logger&#39;)
            # 設(shè)置日志等級(jí),低于設(shè)置等級(jí)的日志被丟棄
            self.logger.setLevel(lg.DEBUG)
            # 設(shè)置輸出日志格式
            self.fmt = lg.Formatter("[%(asctime)s] - %(levelname)s: %(message)s","%Y-%m-%d %H:%M:%S")  
            # 創(chuàng)建一個(gè)文件處理器
            self.fh = lg.FileHandler(self.log_,encoding=&#39;utf-8&#39;)
            # 設(shè)置文件輸出格式
            self.fh.setFormatter(self.fmt)
            # 將文件處理器添加到日志處理器中
            self.logger.addHandler(self.fh)
            # 創(chuàng)建一個(gè)控制臺(tái)處理器
            self.sh=lg.StreamHandler()
            # 設(shè)置控制臺(tái)輸出格式
            self.sh.setFormatter(self.fmt)
            # 將控制臺(tái)處理器添加到日志處理器中
            self.logger.addHandler(self.sh)
            
            # 關(guān)閉文件
            self.fh.close()
            
    # 使用
    if __name__ == &#39;__main__&#39;:
        _path = os.paht.dirname(__file__) # 獲取當(dāng)前文件的路徑
        lg = logging_(_path).logger # 實(shí)例化封裝類
        lg.info(&#39;1111&#39;)
        lg.debug(&#39;2222&#39;)
        lg.error(&#39;33333&#39;)
        lg.warning(&#39;44444&#39;)

    運(yùn)行後輸出內(nèi)容,目前檔案目錄下多了一個(gè)log.log檔:

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    ##日誌內(nèi)容:

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    二、產(chǎn)生日誌與讀取日誌

    1、新建一個(gè)py檔(generation_log),檔名自定,

    2、直接上代碼

    # 導(dǎo)入上面封裝好的日志輸出
    from logging.demo_01 import logging_
    import os,time
    _path = os.path.dirname(__file__) # 獲取當(dāng)前文件路徑
    lg = logging_(_path) # 實(shí)例化類
    
    # 創(chuàng)建方法生成日志
    def generation_log():    
        for i in range(20):
            lg.info(i)
            time.sleep(1)
            
    # 讀取日志并返回
    def red_logs():
        log_path = f&#39;{_path}/log.log&#39; # 獲取日志文件路徑
        with open(log_path,&#39;rb&#39;) as f:
            log_size = path.getsize(log_path) # 獲取日志大小
            offset = -100
            # 如果文件大小為0時(shí)返回空
            if log_size == 0:
                return &#39;&#39;
            while True:
                # 判斷offset是否大于文件字節(jié)數(shù),是則讀取所有行,并返回
                if (abs(offset) >= log_size):
                    f.seek(-log_size, 2)
                    data = f.readlines()
                    return data
                # 游標(biāo)移動(dòng)倒數(shù)的字節(jié)數(shù)位置
                data = f.readlines()
                # 判斷讀取到的行數(shù),如果大于1則返回最后一行,否則擴(kuò)大offset
                if (len(data) > 1):
                    return data
                else:
                    offset *= 2

    三、Flask創(chuàng)建一個(gè)web服務(wù)

    flask是乾啥的當(dāng)下不做解釋,有興趣可以百度也可以等待我的更新嘎嘎,這裡直接上步驟加代碼,快速實(shí)作一個(gè)簡(jiǎn)單的web頁(yè)面

    1、目錄下建立一個(gè)app.py檔案輸入下面程式碼

    #導(dǎo)入flask模塊
    from flask import Flask,request,render_template
    # 導(dǎo)入日志生成和日志返回方法
    from study.logging.generation_log import generation_log,red_logs
    
    app = Flask(__name__)
    
    line_number = [0] #存放當(dāng)前日志行數(shù)
    # 定義接口把處理日志并返回到前端
    @app.route(&#39;/get_log&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
    def get_log():
        log_data = red_logs() # 獲取日志
        # 判斷如果此次獲取日志行數(shù)減去上一次獲取日志行數(shù)大于0,代表獲取到新的日志
        if len(log_data) - line_number[0] > 0:
            log_type = 2 # 當(dāng)前獲取到日志
            log_difference = len(log_data) - line_number[0] # 計(jì)算獲取到少行新日志
            log_list = [] # 存放獲取到的新日志
            # 遍歷獲取到的新日志存放到log_list中
            for i in range(log_difference):
                log_i = log_data[-(i+1)].decode(&#39;utf-8&#39;) # 遍歷每一條日志并解碼
                log_list.insert(0,log_i) # 將獲取的日志存放log_list中
        else:
            log_type = 3
            log_list = &#39;&#39;
        # 已字典形式返回前端
        _log = {
            &#39;log_type&#39; : log_type,
            &#39;log_list&#39; : log_list
        }
        line_number.pop() # 刪除上一次獲取行數(shù)
        line_number.append(len(log_data)) # 添加此次獲取行數(shù)
        return _log
    
    # 通過前端請(qǐng)求執(zhí)行生成日志方法
    @app.route(&#39;/generation_log&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
    def generation_log_():
        if request.method == &#39;POST&#39;:
            generation_log()
        return &#39;&#39;
    
    @app.route(&#39;/&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])
    def index():
        if request.method == &#39;GET&#39;:
            return render_template(&#39;index.html&#39;)
        if request.method == &#39;POST&#39;:
            return render_template(&#39;index.html&#39;)
    
    if __name__ == "__main__":
        app.run(debug=True) #啟動(dòng)web服務(wù)

    ##2、目錄下建立一個(gè)templates目錄

    3、在templates目錄下新建一個(gè)index.html文件,並輸入下面前端程式碼

    <!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=&#39;log_list&#39;>
            <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
          // 創(chuàng)建一個(gè)元素節(jié)點(diǎn)
        function insertAfter( newElement, targetElement ){ // newElement是要追加的元素targetElement 是指定元素的位置
            var parent = targetElement.parentNode; // 找到指定元素的父節(jié)點(diǎn)
            parent.appendChild( newElement, targetElement );
        };
        function log(){
            clearTimeout(time) // 清空定時(shí)器
            var log_null = 0 //存放空日志次數(shù)
            var div = document.getElementById(&#39;log_list&#39;) //找到存放日志的塊
            div.innerHTML = "<div id=&#39;log_text&#39;></div>" // 每次跑清空div內(nèi)內(nèi)容
    
            $.post(&#39;/generation_log&#39;,{},function (){
            }) //請(qǐng)求生成日志接口
            // 生成定時(shí)器
            time = setInterval(function (){
                $.get(&#39;/get_log&#39;,{},function (data){ //請(qǐng)求獲取日志接口獲取日志
                    if (data.log_type == 3){ //如果獲取的是空日志log_null次數(shù)加1
                        log_null ++
                        if (log_null >= 5){
                            clearTimeout(time) //如果連續(xù)10次獲取的都是空日志清除定時(shí)任務(wù)
                        }
                        return
                    }
                    if (data.log_type == 2){ //如果獲取到新日志
                        for (i=0;i<data.log_list.length;i++){ //遍歷日志
                            var p = document.createElement("p") //生成一個(gè)p標(biāo)簽
                            p.innerHTML = data.log_list[i] //日志存放到P標(biāo)簽內(nèi)
                            var header = document.getElementById(&#39;log_text&#39;)
                            insertAfter(p,header) //將p標(biāo)簽添加到log_text div中
                            div.scrollTop = div.scrollHeight //滾動(dòng)條實(shí)時(shí)顯示到底部
                        }
                        log_null = 0 //日志為空次數(shù)清0
                    }
    
                })
            },1000) //每1秒鐘執(zhí)行一次
        }
        document.getElementById(&#39;button&#39;).addEventListener("click",log) //點(diǎn)擊開始按鈕開始執(zhí)行
    </script>
    </html>
    四、啟動(dòng)服務(wù)

    1、檢視專案目錄,程式碼是否編寫齊全

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    #2、啟動(dòng)app.py檔案

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    #3、存取本機(jī)連線:http://127.0.0.1:5000/

    如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示

    4 、點(diǎn)選開始即可

    以上是如何使用python+Flask實(shí)作日誌在web網(wǎng)頁(yè)即時(shí)更新顯示的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

    本網(wǎng)站聲明
    本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強(qiáng)大的PHP整合開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁(yè)開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)程式碼編輯軟體(SublimeText3)

    熱門話題

    Laravel 教程
    1597
    29
    PHP教程
    1488
    72
    PHP調(diào)用AI智能語(yǔ)音助手 PHP語(yǔ)音交互系統(tǒng)搭建 PHP調(diào)用AI智能語(yǔ)音助手 PHP語(yǔ)音交互系統(tǒng)搭建 Jul 25, 2025 pm 08:45 PM

    用戶語(yǔ)音輸入通過前端JavaScript的MediaRecorderAPI捕獲並發(fā)送至PHP後端;2.PHP將音頻保存為臨時(shí)文件後調(diào)用STTAPI(如Google或百度語(yǔ)音識(shí)別)轉(zhuǎn)換為文本;3.PHP將文本發(fā)送至AI服務(wù)(如OpenAIGPT)獲取智能回復(fù);4.PHP再調(diào)用TTSAPI(如百度或Google語(yǔ)音合成)將回復(fù)轉(zhuǎn)為語(yǔ)音文件;5.PHP將語(yǔ)音文件流式返回前端播放,完成交互。整個(gè)流程由PHP主導(dǎo)數(shù)據(jù)流轉(zhuǎn)與錯(cuò)誤處理,確保各環(huán)節(jié)無縫銜接。

    如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯(cuò) PHP語(yǔ)法檢測(cè)與優(yōu)化 如何用PHP結(jié)合AI實(shí)現(xiàn)文本糾錯(cuò) PHP語(yǔ)法檢測(cè)與優(yōu)化 Jul 25, 2025 pm 08:57 PM

    要實(shí)現(xiàn)PHP結(jié)合AI進(jìn)行文本糾錯(cuò)與語(yǔ)法優(yōu)化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫(kù);2.通過PHP的curl或Guzzle調(diào)用API並處理返回結(jié)果;3.在應(yīng)用中展示糾錯(cuò)信息並允許用戶選擇是否採(cǎi)納;4.使用php-l和PHP_CodeSniffer進(jìn)行語(yǔ)法檢測(cè)與代碼優(yōu)化;5.持續(xù)收集反饋並更新模型或規(guī)則以提升效果。選擇AIAPI時(shí)應(yīng)重點(diǎn)評(píng)估準(zhǔn)確率、響應(yīng)速度、價(jià)格及對(duì)PHP的支持。代碼優(yōu)化應(yīng)遵循PSR規(guī)範(fàn)、合理使用緩存、避免循環(huán)查詢、定期審查代碼,並藉助X

    如何用PHP開發(fā)AI智能表單系統(tǒng) PHP智能表單設(shè)計(jì)與分析 如何用PHP開發(fā)AI智能表單系統(tǒng) PHP智能表單設(shè)計(jì)與分析 Jul 25, 2025 pm 05:54 PM

    選擇合適的PHP框架需根據(jù)項(xiàng)目需求綜合考慮:Laravel適合快速開發(fā),提供EloquentORM和Blade模板引擎,便於數(shù)據(jù)庫(kù)操作和動(dòng)態(tài)表單渲染;Symfony更靈活,適合複雜系統(tǒng);CodeIgniter輕量,適用於對(duì)性能要求較高的簡(jiǎn)單應(yīng)用。 2.確保AI模型準(zhǔn)確性需從高質(zhì)量數(shù)據(jù)訓(xùn)練、合理選擇評(píng)估指標(biāo)(如準(zhǔn)確率、召回率、F1值)、定期性能評(píng)估與模型調(diào)優(yōu)入手,並通過單元測(cè)試和集成測(cè)試保障代碼質(zhì)量,同時(shí)持續(xù)監(jiān)控輸入數(shù)據(jù)以防止數(shù)據(jù)漂移。 3.保護(hù)用戶隱私需採(cǎi)取多項(xiàng)措施:對(duì)敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ)(如AES

    python seaborn關(guān)節(jié)圖示例 python seaborn關(guān)節(jié)圖示例 Jul 26, 2025 am 08:11 AM

    使用Seaborn的jointplot可快速可視化兩個(gè)變量間的關(guān)係及各自分佈;2.基礎(chǔ)散點(diǎn)圖通過sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")實(shí)現(xiàn),中心為散點(diǎn)圖,上下和右側(cè)顯示直方圖;3.添加回歸線和密度信息可用kind="reg",並結(jié)合marginal_kws設(shè)置邊緣圖樣式;4.數(shù)據(jù)量大時(shí)推薦kind="hex",用

    如何用PHP結(jié)合AI做視頻內(nèi)容分析 PHP智能視頻標(biāo)籤生成 如何用PHP結(jié)合AI做視頻內(nèi)容分析 PHP智能視頻標(biāo)籤生成 Jul 25, 2025 pm 06:15 PM

    PHP結(jié)合AI做視頻內(nèi)容分析的核心思路是讓PHP作為后端“膠水”,先上傳視頻到云存儲(chǔ),再調(diào)用AI服務(wù)(如GoogleCloudVideoAI等)進(jìn)行異步分析;2.PHP解析返回的JSON結(jié)果,提取人物、物體、場(chǎng)景、語(yǔ)音等信息生成智能標(biāo)簽并存入數(shù)據(jù)庫(kù);3.優(yōu)勢(shì)在于利用PHP成熟的Web生態(tài)快速集成AI能力,適合已有PHP系統(tǒng)的項(xiàng)目高效落地;4.常見挑戰(zhàn)包括大文件處理(用預(yù)簽名URL直傳云存儲(chǔ))、異步任務(wù)(引入消息隊(duì)列)、成本控制(按需分析 預(yù)算監(jiān)控)和結(jié)果優(yōu)化(標(biāo)簽規(guī)范化);5.智能標(biāo)簽顯著提升視

    PHP集成AI情感計(jì)算技術(shù) PHP用戶反饋智能分析 PHP集成AI情感計(jì)算技術(shù) PHP用戶反饋智能分析 Jul 25, 2025 pm 06:54 PM

    要將AI情感計(jì)算技術(shù)融入PHP應(yīng)用,核心是利用雲(yún)服務(wù)AIAPI(如Google、AWS、Azure)進(jìn)行情感分析,通過HTTP請(qǐng)求發(fā)送文本並解析返回的JSON結(jié)果,將情感數(shù)據(jù)存入數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)用戶反饋的自動(dòng)化處理與數(shù)據(jù)洞察。具體步驟包括:1.選擇適合的AI情感分析API,綜合考慮準(zhǔn)確性、成本、語(yǔ)言支持和集成複雜度;2.使用Guzzle或curl發(fā)送請(qǐng)求,存儲(chǔ)情感分?jǐn)?shù)、標(biāo)籤及強(qiáng)度等信息;3.構(gòu)建可視化儀錶盤,支持優(yōu)先級(jí)排序、趨勢(shì)分析、產(chǎn)品迭代方向和用戶細(xì)分;4.應(yīng)對(duì)技術(shù)挑戰(zhàn),如API調(diào)用限制、數(shù)

    如何用PHP開發(fā)基於AI的文本摘要 PHP信息快速提煉技術(shù) 如何用PHP開發(fā)基於AI的文本摘要 PHP信息快速提煉技術(shù) Jul 25, 2025 pm 05:57 PM

    PHP開發(fā)AI文本摘要的核心是作為協(xié)調(diào)器調(diào)用外部AI服務(wù)API(如OpenAI、HuggingFace),實(shí)現(xiàn)文本預(yù)處理、API請(qǐng)求、響應(yīng)解析與結(jié)果展示;2.局限性在於計(jì)算性能弱、AI生態(tài)薄弱,應(yīng)對(duì)策略為藉力API、服務(wù)解耦和異步處理;3.模型選擇需權(quán)衡摘要質(zhì)量、成本、延遲、並發(fā)、數(shù)據(jù)隱私,推薦使用GPT或BART/T5等抽象式模型;4.性能優(yōu)化包括緩存、異步隊(duì)列、批量處理和就近區(qū)域選擇,錯(cuò)誤處理需覆蓋限流重試、網(wǎng)絡(luò)超時(shí)、密鑰安全、輸入驗(yàn)證及日誌記錄,以確保系統(tǒng)穩(wěn)定高效運(yùn)行。

    python列表到字符串轉(zhuǎn)換示例 python列表到字符串轉(zhuǎn)換示例 Jul 26, 2025 am 08:00 AM

    字符串列表可用join()方法合併,如''.join(words)得到"HelloworldfromPython";2.數(shù)字列表需先用map(str,numbers)或[str(x)forxinnumbers]轉(zhuǎn)為字符串後才能join;3.任意類型列表可直接用str()轉(zhuǎn)換為帶括號(hào)和引號(hào)的字符串,適用於調(diào)試;4.自定義格式可用生成器表達(dá)式結(jié)合join()實(shí)現(xiàn),如'|'.join(f"[{item}]"foriteminitems)輸出"[a]|[

    See all articles