Python 自动化之收发邮件(二)
发邮件之Windows进程监控
文章目录
- 发邮件之Windows进程监控
- 前言
- 一、基本内容
- 二、基本结构
- 三、库模块
- 四、函数模块
- 1.进程监控
- 2.邮件发送
- 五、程序运行模块
- 1.获取时间
- 2.用户输入
- 3.进程监控
- 3.1进程启动发邮件
- 3.2进程停止发邮件
- 总结
前言
上一篇简单写了一下如何进行邮件的收发操作。那么这篇在此基础上呢添加了一些触发条件,让程序替我们监控一些东西,有问题了就发邮件给我们。
一、基本内容
监控Windows系统中的某个进程,共两种模式:一是程序进程启动触发发邮件操作;二是程序进程停止触发发邮件操作。同时,邮件中会写明什么时间《日期格式 2023-02-11 06:45:21》什么程序启动还是停止。
这个是我测试的效果图。
二、基本结构
本程序主要分为三大部分:
-
库模块
-
函数模块:
进程监控邮件发送
-
程序运行模块
获取日期用户输入程序判断
三、库模块
代码如下:
# 用来做程序进程的监控
import psutil# 用来记录当前时间
import time# 用来发送邮件
import smtplib# 用来编写邮件正文内容
from email.mime.text import MIMEText
每个库的作用已经注释出来了,记得看注释。
四、函数模块
1.进程监控
代码如下:
def is_process_running():for proc in psutil.process_iter():if proc.name() == target_process:return Truereturn False
此处是监测用户输入的进程是否在运行。是,则返回True;否,则返回False。
后面会用这两个布尔值做判断。
2.邮件发送
代码如下:
def send_mail():# 创建邮件对象msg['Subject'] = 'Test Message' # 这个是邮件的标题msg['From'] = ' xxxxxxxxx@163.com'msg['To'] = 'xxxxxxxxxxx@qq.com'# 设置服务器的地址和端口smtpobj = smtplib.SMTP_SSL('smtp.163.com', 465)# 向邮件服务器打招呼,这很重要smtpobj.ehlo()# 登录到smtp服务器smtpobj.login('xxxxxxxxx@163.com', 'LSxxxxxxxxx')# 发送邮件smtpobj.sendmail(msg['From'], [msg['To']], msg.as_string())# 从smtp服务器断开smtpobj.quit()
记得看代码注释哦。要是还是有点不懂点击这个链接《Python 自动化之收发邮件(一)》https://blog.csdn.net/weixin_57061292/article/details/134983850
注意:msg[‘Subject’] = ‘Test Message’ 这个是设置邮件的标题的代码。
五、程序运行模块
1.获取时间
代码如下:
if __name__ == '__main__':# 获得当前时间时间戳后转化为本地时间timeStruct = time.localtime(int(time.time()))# 日期格式 2023-02-11 06:45:21strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)
第一步是获取时间。第二步是把时间转换成用户想要的格式。
if name == ‘main’: 这个的作用是当这个python文件中的函数被别的文件导入使用时候,程序运行模块不会运行。
后续代码都会在这个下面写。
2.用户输入
代码如下:
# 要监控的进程的名称print('please input the process(例子:notepad.exe) ', end='')target_process = input()# 选择监控模式print('please choose 1 程序运行发邮件 2 程序停止发邮件: ', end='')choice = int(input())
用户需要输入监控的进程的名称,比如:notepad.exe。然后选择如何进行监控。
3.进程监控
3.1进程启动发邮件
代码如下:
if choice == 1:# 设置邮件正文内容msg = MIMEText(f'At {strTime}, the process of {target_process} has been started.')while True:is_running = is_process_running()# 如果函数的进程监控模块返回Trueif is_running:send_mail()else:print('Process is not running')# 每隔一段时间检查一次,例如每5秒time.sleep(10)
首先,设置要发送的邮件正文的内容。然后,搞一个while循环一直检测。
需要注意的是,要设置时间间隔监测,要不然会很吃资源。
3.2进程停止发邮件
代码如下:
elif choice == 2:# 设置邮件正文内容msg = MIMEText(f'At {strTime}, the process of {target_process} has been stop.')while True:is_running = is_process_running()# 如果函数的进程监控模块返回Falseif not is_running:send_mail()else:print('Process is running')# 每隔一段时间检查一次,例如每5秒time.sleep(10)
跟 《3.1进程启动发邮件》 几乎一样,只是判断进程监控函数模块的返回值不同。
总结
看完之后,是不是觉得很简单呀,不过如此哈哈哈哈哈哈
这个东西其实也是自动化运维中很重要的一样东西,其中的原理跟我写的这个估计也大差不差的。
相关文章:

Python 自动化之收发邮件(二)
发邮件之Windows进程监控 文章目录 发邮件之Windows进程监控前言一、基本内容二、基本结构三、库模块四、函数模块1.进程监控2.邮件发送 五、程序运行模块1.获取时间2.用户输入3.进程监控3.1进程启动发邮件3.2进程停止发邮件 总结 前言 上一篇简单写了一下如何进行邮件的收发操…...

RHEL8_Linux_Ansible常用模块的使用
本章主要介绍Ansible中最常见模块的使用 shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a "模块的参数" 对被管理机器执行不同的操作,只需要调用不同的模块…...

2023 英特尔On技术创新大会直播 | AI 融合发展之旅
前言 2023 年的英特尔 On 技术创新大会中国站,主要聚焦最新一代增强 AI 能力的计算平台,深度讲解如何支持开放、多架构的软件方案,以赋能人工智能并推动其持续发展。 大会的目标之一是优化系统并赋能开发者,特别注重芯片增强技术…...

【JavaWeb】往浏览器打印一个hello world
上集:建一个web项目 第一步:建好Servlet类的文件 右键src,建一个class 就行 第二步:编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解࿰…...

技术探秘:在RISC Zero中验证FHE——由隐藏到证明:FHE验证的ZK路径(1)
1. 引言 开源代码实现见: https://github.com/hashcloak/fhe_risc0_zkvm(Rust)https://github.com/weikengchen/vfhe-profiled(Rust)https://github.com/l2iterative/vfhe0(Rust) L2IV Resea…...

Spring容器中scope为prototype类型Bean的回收机制
文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时,遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流…...
Python生成器(python系列25)
前言:什么是生成器,他和迭代器的区别是什么?什么时生成器表达式,为什么和列表推导式那么像呢? 生成器: 定义:能够动态(循环一次,计算一次,返回一次…...

Vue项目搭建过程
Vue项目搭建过程 1、安装NodeJs 1.1 下载安装包 在 http://nodejs.cn/download/ 上下载64位安装包,然后进行安装,和普通软件的安装一样。 C:\Users\Administrator>node -v v16.13.1C:\Users\Administrator>npm -v 8.5.51.2 安装cnpm # 安装cn…...

系统分析师(软考)知识点整理(一)
第一章 信息 信息是不确定性的减少 xi: n个状态中的第i个状态p(xi):出现第i个状态的概率b: b一般取值为2 特征 #mermaid-svg-pvPkY9RE5GZIIIxl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pvPkY9RE5GZIIIxl…...

2021年数维杯国际大学生数学建模D题2021年电影市场票房波动模型分析求解全过程文档及程序
2021年数维杯国际大学生数学建模 D题 2021年电影市场票房波动模型分析 原题再现: 1、电影票房预测建模背景 随着人们文化消费需求的增加,电影院和银幕的数量不断增加,我国的电影产业不断呈现出繁荣景象。2019年,全国电影票房…...

Kubernetes 的用法和解析 -- 5
一.企业级镜像仓库Harbo 准备:另起一台新服务器,并配置docker yum源,安装docker 和 docker-compose 1.1 上传harbor安装包并安装 [rootharbor ~]# tar xf harbor-offline-installer-v2.5.3.tgz [rootharbor ~]# cp harbor.yml.tmpl harbor…...
HTML选择题试题——附答案
单选题 HTML的缩写是什么? A) Hyper Tool Markup LanguageB) Hyperlinks and Text Markup LanguageC) Hyper Text Markup LanguageD) Home Tool Markup Language 下列哪个标签用于定义文档的主体内容? A) <head>B) <body>C) <title>D)…...

html之CSS的高级选择器应用
文章目录 一、CSS高级选择器有哪些呢?二、高级选择器的应用1、层次选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器 2、结构伪类选择器(不常用)3、属性选择器E[attr]E[attrval]E[attr^val]E[attr$val]E[attr*val] 一、CSS高级选择器有…...
elementui+ <el-date-picker type=“datetime“/>时间组件的当前时间的180天之内的禁止选择处理
需求1如下:当前时间180天不可选择,180天之后可以选择,之前的时间都禁止选择 页面代码如下: <el-date-picker v-model"temp.expire_time" :picker-options"pickerOption" type"datetime" placeh…...

全网好听的BGM都在这里下载,赶紧收藏好了
无论是自媒体创作者还是从事视频剪辑工作的朋友,对于BGM的选择都很重要,一首适配的BGM能大大提升你作品的质量,还能让作品更优秀。哪里才能找到好听又免费的BGM?下面推荐几个我多年收藏的6个音效、音频素材网站,赶紧收…...

Spark编程实验一:Spark和Hadoop的安装使用
目录 一、目的与要求 二、实验内容 三、实验步骤 1、安装Hadoop和Spark 2、HDFS常用操作 3、Spark读取文件系统的数据 四、结果分析与实验体会 一、目的与要求 1、掌握在Linux虚拟机中安装Hadoop和Spark的方法; 2、熟悉HDFS的基本使用方法; 3、掌…...

代理和AOP
一:java代理 整体分为两种:静态代理和动态代理 静态代理:23种设计模式里面有个代理模式,那个就是静态代理。 动态代理:分为编译时增强(AspectJ)和运行时增强(JDK动态代理和CGLIB动态代理) 1:静态代理 这种代理在我们日常生活中其…...
Solidity-3-类型
Solidity 是一种静态类型语言,这意味着每个变量(状态变量和局部变量)都需要在编译时指定变量的类型。 “undefined”或“null”值的概念在Solidity中不存在,但是新声明的变量总是有一个 默认值 ,具体的默认值跟类型相…...

【mask转json】文件互转
mask图像转json文件 当只有mask图像时,可使用下面代码得到json文件 import cv2 import os import json import sysdef func(file:str) -> dict:png cv2.imread(file)gray cv2.cvtColor(png, cv2.COLOR_BGR2GRAY)_, binary cv2.threshold(gray,10,255,cv2.TH…...

华清远见嵌入式学习——ARM——作业1
要求: 代码: mov r0,#0 用于加mov r1,#1 初始值mov r2,#101 终止值loop: cmp r1,r2addne r0,r0,r1addne r1,r1,#1bne loop 效果:...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...