具体代码如下所示
环境linux
注意:不要起名为email.py。(因为会报错)
简单的原理,通过linux中ps命令查看有个进程号显示的内容,如果这个进程号没有任务则通过smtplib工具进行发送邮件
其中qq授权码,登录qq邮箱后,点击左上角的-设置,然后选择-账户,下面有个POP3
把这个打开就会告诉你一个授权码
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
#邮箱服务器地址,这里我们用的时qq的。要换成163的话这里需要更换。并且如果换成163的话端口号也不一样
mail_host = "smtp.qq.com"
#邮箱登录名
mail_user = '2*********@qq.com'
#密码(部分邮箱为授权码)
mail_pass = '**********************'
#邮件发送方邮箱地址
sender = '2*********@qq.com'
#接收邮箱的地址
receivers = ['1*********@qq.com']
message = MIMEText('起床干活了','plain','utf-8')
#邮件主题
message['Subject'] = '你代码跑完了'
#发送方信息
message['From'] = sender
#接受方信息
message['To'] = receivers[0]
import os
import time
def autohalt():
while True:
ps_string_1 = os.popen('ps ax | grep 6666','r').read() # 这里的6666是进程号,后面简单说一下怎么查询
ps_strings_1 = ps_string_1.strip().split('\n')
# print(ps_strings)
if len(ps_strings_1)<=2:
message = MIMEText('你第一块卡的代码跑完了,赶紧起床','plain','utf-8')
smtp = SMTP_SSL(mail_host)
smtp.login(mail_user, mail_pass)
smtp.sendmail(sender, receivers, message.as_string())
smtp.quit()
print('success')
return
else:
# print('Still',len(ps_strings),'Processes, waiting 60s...')
time.sleep(60) #一分钟后检查一次
if __name__=='__main__':
autohalt()
查询进程号:
如果是跑在显卡上可以使用nvidia-smi
进行查询。其中PID下面的就是进程号。
也可以使用ps -ef|grep python
进行查询(如果不是python运行的话,可以换成别的)
查询出来的第一位是用哪个账户运行的,第二位就是进程号,第三位是父进程号。然后可以看最后运行的命令来看是不是自己运行的代码。然后根据这个把上面的6666替换就可以了。
就简单的说一下,有不懂的可以私信或者下面评论。