python3實現tailf命令

由于windows上面沒有類似linux上面的tailf命令,所以下面的python腳本來代替其能力。

tailf.py

import re
import timeimport os
import argparsedef follow(thefile):thefile.seek(0, os.SEEK_END)while True:_line = thefile.readline()if not _line:time.sleep(0.1)continueyield _lineclass Pipe(object):def handle(self, _line):passclass AwkPipe(Pipe):def __init__(self, fs, script):self.fs = fsself.script = scriptdef handle(self, _line: str):clos = _line.split(self.fs)try:return self.script.format(*clos)except IndexError as e:return "parse_err:" + self.script + str(clos)class GrepPipe(Pipe):def __init__(self, grep_str):self.grep_str = grep_strdef handle(self, _line):if re.search(grep, _line):return _linereturn Noneclass PrintPipe(Pipe):def handle(self, _line):if _line.endswith("\n"):print(_line, end="")else:print(_line)if __name__ == '__main__':arg_parser = argparse.ArgumentParser()arg_parser.add_argument("file")arg_parser.add_argument("-F", help="分隔符", required=False)arg_parser.add_argument("-s", help="腳本,使用format的{0}格式,{0}標識分割后的第一個元素占位,依次遞增。",required=False)arg_parser.add_argument("-g", "--grep", help="過濾字符,支持正則", required=False)args = arg_parser.parse_args()logfile = open(args.file, "r", encoding='utf-8')grep = args.greppipes = []if args.F and args.s:pipes.append(AwkPipe(args.F, args.s))if grep:pipes.append(GrepPipe(grep))pipes.append(PrintPipe())try:loglines = follow(logfile)for line in loglines:_tmp_line = line.strip()if not _tmp_line:continuefor pipe in pipes:_tmp_line = pipe.handle(_tmp_line)if _tmp_line is None:breakexcept KeyboardInterrupt:pass

例子:
輸出內容:python3 tailf.py app.log
按照分隔符分割并按照指定格式輸出:python3 tailf.py app.log -F "|" -s "第一列:{0} 第二列:{1}"
輸出匹配內容:python3 tailf.py app.log -g 匹配字符
按照分隔符分割并按照指定格式的匹配內容輸出:python3 tailf.py app.log -F "|" -s "第一列:{0} 第二列:{1}" -g 匹配字符

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RabbitMQ 搭建和工作模式

MQ基本概念 1. MQ概述 MQ全稱 Message Queue([kju?])(消息隊列),是在消息的傳輸過程中保存消息的容器。多用于分布式系統之間進行通信。 (隊列是一種容器,用于存放數據的都是容器&#xff0…

docker部署微服務

目錄 docker操作命令 鏡像操作命令 拉取鏡像 導出鏡像 刪除鏡像 加載鏡像 推送鏡像 部署 pom文件加上 在每個模塊根目錄加上DockerFile文件 項目根目錄加上docker-compose.yml文件 打包,clean,package 服務器上新建文件夾 測試docker-compo…

基于springboot和微信小程序的流浪動物管理系統

基于springboot和微信小程序的流浪動物管理系統 內容簡介 基于微信小程序實現的流浪動物管理系統,該系統針對用戶與管理員兩種角色進行開發。 1、提供流浪動物的信息查詢功能,包括品種、年齡、性別、健康狀況等,提供救助活動報名功能。 2…

5.1 PBR基礎 BRDF介紹

基于物理的渲染(Physically Based Rendering,PBR)是指使用基于物理原理和微平面理論建模的著色/光照模型,以及使用從現實中測量的表面參數來準確表示真實世界材質的渲染理念。 一、反射率方程 理論基礎放在參考鏈接里。 直接開始…

【uniapp】uniapp開發小程序定制uni-collapse(折疊面板)

需求 最近在做小程序,有一個類似折疊面板的ui控件,效果大概是這樣 代碼 因為項目使用的是uniapp,所以打算去找uniapp的擴展組件,果然給我找到了這個叫uni-collapse的組件(鏈接:uni-collapse&#xff09…

超詳細的接口測試

本文主要分為兩個部分: 第一部分:主要從問題出發,引入接口測試的相關內容并與前端測試進行簡單對比,總結兩者之前的區別與聯系。但該部分只交代了怎么做和如何做?并沒有解釋為什么要做? 第二部分&#xf…

ShellCode漏洞

ShellCode漏洞 可以查看如下網址: https://www.cnblogs.com/kakadewo/p/12996878.html 定義: shellcode是一段用于利用軟件漏洞而執行的代碼,shellcode為16進制之機械碼,以其經常讓攻擊者獲得shell而得名。shellcode常常使用機…

老鳥總結,軟件測試工程師職業發展規劃路線,入門到沖擊大廠...

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 1、測試工程師發展…

YOCTO 下載repo工具失敗解決辦法

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repocp repo ~/binchmod ax ~/bin/repo如果使用時報錯, 切換ubuntu 到 python3 版本。gedit repo 修改repo默認鏈接地址:REPO_URL "https://gerrit.googlesource.com/git-repo"…

Spring AOP-面向切面編程概念

Spring AOP-面向切面編程概念 AOP(面向切面編程)是編程范式的一種,它允許程序員將橫切關注點(cross-cutting concerns)模塊化。在面向切面編程中,這些橫切關注點通常體現為在多個點重復出現的代碼&#xf…

Android設計模式--適配器模式

至誠之道,可以前知 一,定義 適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式在我們的開發中使用率極高,ListView,GridView&am…

面試cast:reinterpret_cast/const_cast/static_cast/dynamic_cast

目錄 1. cast 2. reinterpret_cast 3. const_cast 3.1 加上const的情況 3.2 去掉const的情況 4. static_cast 4.1 基本類型之間的轉換 4.2 void指針轉換為任意基本類型的指針 4.3 子類和父類之間的轉換 5. dynamic_cast 5.1 RTTI(Run-time Type Identification) 1.…

Selenium實現多頁面切換

當使用 Selenium 進行自動化測試或爬取數據時,有時需要處理多個頁面之間的切換。以下是一些可能需要多頁面切換的情況: 1、打開新窗口/頁面: 在當前頁面上點擊鏈接、按鈕或執行某些操作時,可能會打開一個新的窗口或頁面。此時&a…

【element優化經驗】怎么讓element-ui中表單多語言切換排版不亂

目錄 前言: 痛點: 1.左對齊,右對齊在中文和外語情況下字數不同,固定寬度會使名稱換行,不在整行對齊,影響美觀。 2.如果名稱和輸入框不在一行,會使頁面越來越長 3.label-width值給變量&#…

隨筆記錄-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

環境:springboot-2.7.5 配置文件配置靜態資源映射 springboot配置靜態資源映射方式是通過 WebMvcAutoConfiguration 實現的 spring: # resources: # # 自springboot 2.5.5之后,該屬性已經被廢棄,使用spring.web.resources.static-locat…

爬蟲逆向你應該懂得Javascript知識

背景 大家在學習爬蟲逆向的時候,一般都會涉及到對js源文件進行代碼扣去,但是有的時候,你最好有js基礎,能發現加密或者解密在那個位置,或者是能用python改寫js代碼,這就對個人的Javascript的能力有一定要求…

Switch的使用及其注意事項

注意第五點要看清,case執行完后匹配沒有成功,如過有Default,將會執行Default,如果有case在Default之后,而且Default沒有break語句,那么將會繼續執行case的語句,此時case中的常量表達式只起語句標…

【Skynet 入門實戰練習】游戲模塊劃分 | 基礎功能模塊 | timer 定時器模塊 | logger 日志服務模塊

文章目錄 游戲模塊基礎功能模塊定時器模塊日志模塊通用模塊 游戲模塊 游戲從邏輯方面可以分為下面幾個模塊: 注冊和登錄網絡協議數據庫玩法邏輯其他通用模塊 除了邏輯劃分,還有幾個重要的工具類模塊: Excel 配置導表工具GM 指令測試機器人…

系列一、Spring整合MyBatis不忽略mapper接口同目錄的xxxMapper.xml

一、概述 默認情況下maven要求我們將xml配置、properties配置等都放在resources目錄下,如果我們強行將其放在java目錄,即將xxxMapper.xml和xxxMapper接口放在同一個目錄下,那么默認情況下maven打包時會將這個xxxMapper.xml文件忽略掉&#xf…