上一篇简单写了一下如何进行邮件的收发操作。那么这篇在此基础上呢添加了一些触发条件,让程序替我们监控一些东西,有问题了就发邮件给我们。
监控Windows系统中的某个进程,共两种模式:一是程序进程启动触发发邮件操作;二是程序进程停止触发发邮件操作。同时,邮件中会写明什么时间《日期格式 2023-02-11 06:45:21》什么程序启动还是停止。
这个是我测试的效果图。
本程序主要分为三大部分:
库模块
函数模块:
进程监控
邮件发送
程序运行模块
获取日期
用户输入
程序判断
代码如下:
# 用来做程序进程的监控
import psutil
# 用来记录当前时间
import time
# 用来发送邮件
import smtplib
# 用来编写邮件正文内容
from email.mime.text import MIMEText
每个库的作用已经注释出来了,记得看注释。
代码如下:
def is_process_running():
for proc in psutil.process_iter():
if proc.name() == target_process:
return True
return False
此处是监测用户输入的进程是否在运行。是,则返回True;否,则返回False。
后面会用这两个布尔值做判断。
代码如下:
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’ 这个是设置邮件的标题的代码。
代码如下:
if __name__ == '__main__':
# 获得当前时间时间戳后转化为本地时间
timeStruct = time.localtime(int(time.time()))
# 日期格式 2023-02-11 06:45:21
strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)
第一步是获取时间。第二步是把时间转换成用户想要的格式。
if name == ‘main’: 这个的作用是当这个python文件中的函数被别的文件导入使用时候,程序运行模块不会运行。
后续代码都会在这个下面写。
代码如下:
# 要监控的进程的名称
print('please input the process(例子:notepad.exe) ', end='')
target_process = input()
# 选择监控模式
print('please choose 1 程序运行发邮件 2 程序停止发邮件: ', end='')
choice = int(input())
用户需要输入监控的进程的名称,比如:notepad.exe。然后选择如何进行监控。
代码如下:
if choice == 1:
# 设置邮件正文内容
msg = MIMEText(f'At {strTime}, the process of {target_process} has been started.')
while True:
is_running = is_process_running()
# 如果函数的进程监控模块返回True
if is_running:
send_mail()
else:
print('Process is not running')
# 每隔一段时间检查一次,例如每5秒
time.sleep(10)
首先,设置要发送的邮件正文的内容。然后,搞一个while循环一直检测。
需要注意的是,要设置时间间隔监测,要不然会很吃资源。
代码如下:
elif choice == 2:
# 设置邮件正文内容
msg = MIMEText(f'At {strTime}, the process of {target_process} has been stop.')
while True:
is_running = is_process_running()
# 如果函数的进程监控模块返回False
if not is_running:
send_mail()
else:
print('Process is running')
# 每隔一段时间检查一次,例如每5秒
time.sleep(10)
跟 《3.1进程启动发邮件》 几乎一样,只是判断进程监控函数模块的返回值不同。
看完之后,是不是觉得很简单呀,不过如此哈哈哈哈哈哈
这个东西其实也是自动化运维中很重要的一样东西,其中的原理跟我写的这个估计也大差不差的。