由于我的子系统经常自启动占用后台很大,任务管理器还无法直接关闭必须要用命令行,平常还好一到需要用到一些占用大的软件就非常卡,我想到了Python的os库可以去引用system函数来调用shell

import osos.system('wsl --shutdown kali-linux')

但是这样太麻烦了,好像还不能完全解放劳动力,这样我还需要自己来看子系统是否自启动,此时我想到了psutil库,这个库可以检测进程,再加上无线循环

import os, psutilwhile Ture:for proc in psutil.process_iter():if proc.name() == "vmmem":os.system('wsl --shutdown kali-linux')else:continue

  如此看来确实方便很多,但是作为一个懒人,每次我用完还要去找去运行,即便封装了也感觉还是很不方便,这个时候我想到了python的线程好像是可以实现暂停的,再加上GUI界面是不是就可以实现暂停和继续呢,这里我用tkinter库来实现GUI界面,我还加上了plyer库来显示提示信息

from tkinter import *
import psutil,os,threading
from plyer import notificationclass kill_kali_linux(threading.Thread):def __init__(self, *args, **kwargs):super(kill_kali_linux, self).__init__(*args, **kwargs)self.__flag = threading.Event()self.__flag.set()self.__running = threading.Event()self.__running.set()def run(self,):while self.__running.is_set():self.__flag.wait()for proc in psutil.process_iter():if proc.name() == "vmmem":os.system('wsl --shutdown kali-linux')notification.notify(title = "Python通知",message = "已检测到进程“vmmem”存在自动kill中",timeout = 3)def pause(self):self.__flag.clear()def resume(self):self.__flag.set()def stop(self):self.__flag.set()self.__running.clear()if __name__ == "__main__":a=kill_kali_linux()a.daemon = Trueroot = Tk()root.title("Python检测子系统自启动界面")var1=StringVar()zt = Truea.start()var1.set("目前状态:开启")def hit_me():global ztif zt:zt = Falsea.pause()var1.set("目前状态:暂停")else:zt = Truea.resume()var1.set("目前状态:开启")but=Button(root,text = "点击-->切换功能",width = 15,height = 5,command = hit_me)but.pack(side = LEFT)lab = Label(root, textvariable = var1, bg = 'green', font = ('Arial', 12), width = 15, height = 5)lab.pack(side = LEFT)root.mainloop()

效果图展示:

 对于我这种有强迫症的懒人来说,桌面上放着这样一个丑东西,属实碍眼,这个时候我想到QQ 、微信等一些程序有托盘而且右键可以扩展,托盘显然是一个好的选择,这里我用的是pystray库

from PIL import Image
from plyer import notification
from pystray import *
import threading,psutil,os,sys,pystray,time
from pystray import Icon as icon, Menu as menu, MenuItem as itemclass kill_kali_linux(threading.Thread):def __init__(self, *args, **kwargs):super(kill_kali_linux, self).__init__(*args, **kwargs)self.__flag = threading.Event()self.__flag.set()self.__running = threading.Event()self.__running.set()def run(self):while self.__running.is_set():self.__flag.wait()for proc in psutil.process_iter():if proc.name() == "vmmem":os.system('wsl --shutdown kali-linux')# icon.notify("已检测到进程“vmmem”存在自动kill中")notification.notify(title = "Python通知",message = "已检测到进程“vmmem”存在自动kill中",timeout = 3)def pause(self):self.__flag.clear()def resume(self):self.__flag.set()def stop(self):self.__flag.set()self.__running.clear()a = kill_kali_linux()
a.daemon=Truerun_start_kali_linux_state = False
run_pause_kali_linux_state = False
run_resume_kali_linux_state = False
run_stop_kali_linux_state = False
start_a_and_b = True
stop_a_and_b = False
resume_a_and_b = False
pause_a_and_b = Falsedef run_start_kali_linux(icon:pystray.Icon, item, ):global run_start_kali_linux_stateglobal stop_a_and_bglobal run_resume_kali_linux_stateglobal pause_a_and_bglobal start_a_and_bstart_a_and_b = Falsepause_a_and_b = Truestop_a_and_b = Truerun_resume_kali_linux_state = Truerun_start_kali_linux_state = not item.checkeda.start()if a.is_alive():icon.notify("启动脚本\n脚本已启动")def run_pause_kali_linux(icon:pystray.Icon, item, ):global run_pause_kali_linux_stateglobal run_resume_kali_linux_stateglobal run_start_kali_linux_stateglobal start_a_and_bglobal stop_a_and_bglobal resume_a_and_bstart_a_and_b = Falserun_start_kali_linux_state = Falseresume_a_and_b = Truestop_a_and_b = Truerun_pause_kali_linux_state = not item.checkedrun_resume_kali_linux_state = Falsea.pause()if a.is_alive():icon.notify("暂停脚本\n脚本已暂停")def run_resume_kali_linux(self:pystray.Icon, item, ):global run_resume_kali_linux_stateglobal run_start_kali_linux_stateglobal run_pause_kali_linux_stateglobal start_a_and_bglobal resume_a_and_bresume_a_and_b = Falsestart_a_and_b = Falserun_pause_kali_linux_state = Falserun_resume_kali_linux_state = not item.checkedrun_start_kali_linux_state = Truea.resume()if a.is_alive():self.notify("开启脚本\n脚本已开启")def run_stop_kali_linux(icon:pystray.Icon, item, ):global run_stop_kali_linux_stateglobal run_start_kali_linux_stateglobal run_resume_kali_linux_stateglobal run_pause_kali_linux_stateglobal stop_a_and_bglobal pause_a_and_bglobal start_a_and_bglobal resume_a_and_bresume_a_and_b = Falsestart_a_and_b = Falsepause_a_and_b = Falsestop_a_and_b = Falserun_pause_kali_linux_state = Falserun_resume_kali_linux_state = Falserun_start_kali_linux_state = Falserun_stop_kali_linux_state = not item.checkeda.stop()if not a.is_alive():icon.notify("关闭脚本\n脚本关闭意味着线程关闭,请重启后开启脚本")# a = kill_kali_linux()# a.daemon = Truedef restart(icon:pystray.Icon, item, ):icon.notify("重启脚本\n脚本已重启")time.sleep(0.5)python = sys.executableos.execl(python, python, *sys.argv)def on_exit(icon:pystray.Icon, item):icon.notify("关闭脚本\n脚本已关闭")time.sleep(0.5)icon.stop()image = Image.open("1.jpg")
icon('test', image, menu = menu(item('功能列表',menu(MenuItem(text = '启动脚本', action = run_start_kali_linux, checked = lambda item: run_start_kali_linux_state, enabled = lambda item:start_a_and_b),MenuItem(text = '暂停脚本', action = run_pause_kali_linux, checked = lambda item: run_pause_kali_linux_state, enabled = lambda item:pause_a_and_b),MenuItem(text = '开启脚本', action = run_resume_kali_linux, checked = lambda item: run_resume_kali_linux_state, enabled = lambda item:resume_a_and_b),MenuItem(text = '停止脚本', action = run_stop_kali_linux, checked = lambda item: run_stop_kali_linux_state, enabled = lambda item:stop_a_and_b),)),item("程序列表",menu(MenuItem(text = '重启脚本', action = restart),MenuItem(text = '退出脚本', action = on_exit),)),MenuItem(text = 'Python检测子系统启动', action = run_start_kali_linux, default = True, visible = False,checked = lambda item:run_start_kali_linux_state),
)).run()

可以创建bat+vbs来取消窗口

环境:脚本文件名:1-TP.py,bat如下:

python 1-TP.py

环境:bat文件名: 1-TP.bat,vbs如下:

Set ws = CreateObject("Wscript.Shell")
ws.run"cmd /c 1-TP.bat",0

 创建一个vbs的快捷方式,放入启动项中,就可以实现开机自启。

求关注、求点赞!!!

Python检测后台存活实现脚本暂停、继续、结束(GUI界面版、系统托盘版)相关推荐

  1. 【Python实战】爬取豆瓣排行榜电影数据(含GUI界面版)

    项目简介 这个项目源于大三某课程设计.平常经常需要搜索一些电影,但是不知道哪些评分高且评价人数多的电影.为了方便使用,就将原来的项目重新改写了.当做是对爬虫技术.可视化技术的实践了.主要是通过从排行榜 ...

  2. python爬取豆瓣排行榜电影数据(含GUI界面版)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  3. shell脚本:检测服务器存活状态/80端口/502状态码

    文章目录 检测服务器是否宕机 检测web服务(80端口)是否正常 检测http502状态码 检测服务器是否宕机 需求:ping一台需要被检测的服务器,如果丢包率为100%,则表示机器出问题了,随后发送 ...

  4. python网站后台_Python 网站后台扫描脚本

    Python 网站后台扫描脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  5. shell 脚本批量检测主机存活状态

    liunx 服务器管理中,有时需要检测主机的存活状态,当主机不多的时候,可以直接使用Ping 命令,当主机很多的时候直接使用ping 命令管理起来就比较麻烦了,使用shell 脚本编写的ping 命令 ...

  6. 解决 后台播放音乐时,设置手机铃声,后台音乐不会暂停

    2019独角兽企业重金招聘Python工程师标准>>> 手机后台播放音乐时,设置手机铃声,后台音乐不会暂停,此现象的为设置手机铃声界面,并没要加入播放的foucs机制, 此修改在pa ...

  7. python检测文件夹中新增文件_python检测文件夹变化,并拷贝有更新的文件到对应目录的方法...

    检测文件夹,拷贝有更新的文件到对应目录 2016.5.19 亲测可用,若有借鉴请修改下文件路径: 学习python小一个月后写的这个功能,属于初学,若有大神路过,求代码优化~ newcopy.py: ...

  8. python 检测直线 交点_Python+OpenCV图像处理——实现直线检测

    简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...

  9. 如何使用 Python 检测和识别车牌(附 Python 代码)

    文章目录 创建Python环境 如何在您的计算机上安装Tesseract OCR? 技术提升 磨砺您的Python技能 车牌检测与识别技术用途广泛,可以用于道路系统.无票停车场.车辆门禁等.这项技术结 ...

最新文章

  1. leetcode算法题--链表中的下一个更大节点★
  2. OCP大会 | 腾讯云Open DCN Networking(附PDF)
  3. jzoj1282-资源勘探【统计】
  4. java schema名_关于Schema的名字空间
  5. 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
  6. jmeter里的连接数_Jmeter之连接问题
  7. 程序员啊程序员...济南昊锐科技
  8. STM8单片机ADC连续扫描模式
  9. SSM整合 mybatis多条件查询与分页
  10. Spring 的 BeanPostProcessor接口实现
  11. C# 线程调用主线程中的控件
  12. python 屏幕代码雨效果(已验证)
  13. 日本与美国服务器比较
  14. codeforces 581B Luxurious Houses(线段树点更新,区间查询)
  15. logo制作软件有哪些?这些好用的logo制作软件别错过。​
  16. SSD:单目多目标检测器
  17. PHP两种调用接口方式
  18. 友盟集成第三方分享和登录
  19. 单片机红外通信c语言,用51单片机实现红外通讯源码
  20. 2017.2.13pat乙级15分题

热门文章

  1. pinia与vuex的区别以及pinia的使用
  2. ArcGIS Pro地图和场景
  3. 弘辽科技:春节应该怎么去运营店铺。
  4. 直通车中的地域怎么优化
  5. 流言飞鱼GhostXP_SP3活力版V18.0(软件管理器)
  6. react实现RSA加密解密、DES加密
  7. 2021年:金三银四最强悍的 js 面试题
  8. 初探Linux CPU动态调频与实测
  9. android 亮化图片,城市亮化工程常用的建筑亮化手法有哪些
  10. response响应(cookie携带数据、取数据、删除cookie)