我们在应用的时候,经常需要实现应用启动及检测功能。我们启动命令
python3 restart_and_watchlog.py “sh bin/start.sh” “logs/log.log” “Started Application in” 20
第一个restart_and_watchlog.py 检测脚本
sh bin/start.sh 应用启动命令
logs/log.log 应用启动日志
Started Application in 关键字
20 过期时间20s

# -*- coding: utf-8 -*-##-------------------------------------------------------------------------------
# Name:         restart_and_watchlog.py
# Description:
# Author:       Administrator
# Date:         2022/3/13
#-------------------------------------------------------------------------------import sys
import importlib
import subprocess
import signal
import os
from collections import dequeimportlib.reload(sys)# python3 restart_and_watchlog.py "sh bin/start.sh" "logs/log.log" "Started Application in" 20
#'sh app.sh restart'
start_shell=sys.argv[1]
#'servicelog'
log_file_name=sys.argv[2]
#'Started DemoApplication in'
keywork_success =sys.argv[3]
time_out: int=sys.argv[4]def myHandler(signum,frame):raise Exception("TimeoutError,no found keyword of success.")logline_queue=deque(maxlen=30)def log_search(logfile,search_content):print("#"*50)#防止读取到老日志shell_string='tail -n 10 -F '+logfileprint('shell_string:'+shell_string)working_file=subprocess.Popen(['tail','-n','10','-F',logfile],stdout=subprocess.PIPE,stderr=subprocess.PIPE)print("execute end")try:while True:line=str(working_file.stdout.readline())# process datalogline_queue.append(line)if len(line)>0:if search_content in line:print("success keyword of success:"+line)return Trueelse:return Falsefinally:os.kill(working_file.pid,signal.SIGKILL)def log_search_timeout(logfile,seach_content,time_out=10):try:signal.signal(signal.SIGALRM,myHandler)signal.alarm(int(time_out))result=log_search(logfile,seach_content)signal.alarm(0)except Exception as e:print("execute log search exception",e)return Falsereturn Truedef execute_shell(shellstring):print("#"*50)print("execute start shell:"+shellstring)write_file=subprocess.Popen(shellstring,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)print(write_file.stdout.read())print("#"* 50)execute_shell(start_shell)
#检查脚本执行日志,可以用阻塞式脚本,获取到期望的字符串,就退出result=log_search_timeout(logfile=log_file_name,seach_content=keywork_success,time_out=time_out)print("execute shell log is:"+str(result))if result:exit(0)else:if len(logline_queue)>0:print("error log content:")for logline in logline_queue:print(logline)passexit(-1)

验证结果:

python3 实现应用启动及关键字检测相关推荐

  1. 计算机为什么检测不到u盘启动项,BIOS设置U盘为第一启动项后检测不到如何解决?...

    BIOS设置U盘为第一启动项后检测不到如何解决?一些电脑小白想要尝试自己u盘装系统,但在操作过程中却遇到BIOS设置U盘为第一启动项后检测不到的情况,然后自己也不懂解决方法.其实正确了解设置启动u盘很 ...

  2. 升级python3.8后宝塔面板无法打开_解决宝塔面板升级后因Python2.7与Python3.6共存启动失败...

    解决宝塔面板升级后因Python2.7与Python3.6共存启动失败 lib.im • 2019 年 09 月 06 日 问题描述 起因是更新了宝塔6.9.9,重启之后面板打不开了,于是尝试修复面板 ...

  3. 计算机为什么检测不到u盘启动项,bios设置u盘为第一启动项后检测不到怎么办

    相信很多用户在使用u盘安装系统时,都会将bios第一启动项设置为u盘启动,可是有用户反映bios设置启动项完成后,启动时却检测不到.那么遇到这种问题该怎么解决呢?下面,针对这个问题,小编就和大家一起来 ...

  4. python3 selenium webdriver 启动三大浏览器Firefox,Chrome,IE

    一. 安装Python3 1. 进入Python官方网站:https://www.python.org/downloads/  下载并安装最新版本的Python(建议安装Python3) . 下面是P ...

  5. 百度之星大赛启动,聚焦目标检测,总奖池11.2万!

    点击我爱计算机视觉标星,更快获取CVML新技术 竞赛简介 用科技让复杂的世界更简单"是百度全新的公司使命,而科技为生活则是我们一直坚信的品牌理念.百度自2017年发起了面向全球AI技术爱好者 ...

  6. 学计算机U盘内存,用U盘启动盘快速检测电脑内存的详细教程

    内存作为电脑中重要的设备,影响着系统的运行,同时人们在自己选购机器中也可能遇到不良商家以次充好,那么我们有什么办法来检测电脑内存呢?今天小编为大家介绍借助U盘启动中的工具来完成内存检测. 1.备一个制 ...

  7. python3.6无法启动_python3.6怎么启动

    Python官方的解释器安装包,可以 登录Python 官方网站 下载. 点击这里下载 注意:如果您要在Windows7上运行Python3.6版本的解释器, 一定确保Windows已经安装了 Win ...

  8. 计算机为什么检测不到u盘启动项,BIOS设置启动U盘为第一启动项却检测不到的解决办法【详解】...

    U盘装系统的时候设置BIOS第一启动项为U盘启动可检测不到怎么办?今天IT百科跟大家分析以及解决BIOS设置好启动U盘后仍然检测不了U盘,不能从U盘启动! 一. 首先我们要确保U盘已经经过U启动制作好 ...

  9. 基于python3,百度AI实现人脸检测,人脸识别

    我感觉百度是BAT三家里面AI能力最强的了,在图像和语音的处理上面是很强的,很全面.百度AI里面功能齐全,提供的语言也是很多.唯一不太好的是目前对python3不是很支持,还是支持python2.但也 ...

最新文章

  1. Partition Tables介绍及分区表转换
  2. HTML5 WebSocket之HelloWorld
  3. 3.7.1 读取输入
  4. boost::mp11::mp_set_push_back相关用法的测试程序
  5. Scala入门到精通——第二十三节 高级类型 (二)
  6. 使用docker镜像搭建svn+Apache环境
  7. TCP UDP HTTP 的关系和区别
  8. th:text=“${user?.name}“ ${?.}
  9. Python文档阅读笔记-OpenCV中Match Shapes
  10. 拓扑排序——杂物(洛谷 P1113)
  11. LeetCode(1051)——高度检查器(JavaScript)
  12. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能
  13. Liunx/Unix scp命令详解(转)
  14. java使用Pattern、Matcher调用正则表达式
  15. C# 控制台、接口、窗体使用BarTender打印标签 (亲测可用)
  16. 算法:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.
  17. 蘑菇街php面试,蘑菇街面试
  18. 线上线下协同发展,020 商业解析
  19. VisualSFM+MeshLab 三维重建全过程记录
  20. ros基础概念以及第一个项目

热门文章

  1. 遇到类似的问题,linux cp 参数过长问题---转载
  2. UPlayer播放器问题相关
  3. 外汇会计-概念-即期汇率
  4. u盘有图标计算机显示没有,电脑没插u盘却显示u盘图标是怎么回事?
  5. 2017字节跳动前端工程师秋招笔试试题解析
  6. scrapy的spider中为什么使用yield
  7. haproxy path_beg,path_end ,hdr_beg
  8. WinRar去除弹窗广告的学习和研究
  9. 正电子计算机全身显像(pet ct),正电子发射型计算机断层显像CT (PET-CT)避 免漏诊眼睑恶性肿瘤伴全身转移一例...
  10. 2021年中国海洋大学计算机及电子信息考研成绩分析