利用Python进行远程关电脑
时间:2022-07-22
本文章向大家介绍利用Python进行远程关电脑,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import os
import time
import poplib
import email
import smtplib
from email.header import decode_header
from email.mime.text import MIMEText
from email.header import Header
# 读取Email,获取Email主题
def getEmailSubject():
read = poplib.POP3('pop.163.com')
read.user('xxx@163.com') # 163邮箱用户名
read.pass_('xxx') # 163邮箱设置中的客户端授权密码
allEmails = read.stat() # 读取邮件信息
topEmail = read.top(allEmails[0], 0) # 获取最新的一封邮件
tmp = []
# 解码邮件,存入tmp
for s in topEmail[1]:
try:
tmp.append(s.decode())
except:
try:
tmp.append(s.decode('gbk'))
except:
tmp.append(s.decode('big5'))
message = email.message_from_string('n'.join(tmp))
# 获取邮件主题
subject = decode_header(message['Subject'])
if subject[0][1]:
subjectDecode = subject[0][0].decode(subject[0][1])
else:
subjectDecode = subject[0][0]
return subjectDecode
# 检查Email的主题
def checkEmailSubject():
while True:
subject = getEmailSubject()
print('正在检查邮件...')
print(subject)
if subject == '重启':
os.system('shutdown -r -t 3')
break
if subject == '关机':
os.system('shutdown -s -t 3')
break
if subject[:2] =='定时':
shutdown_ontime(subject)
time.sleep(10) # 每10s检查一次
# 发送邮件(**为了防止启动后读取上一次发送的命令,如关机命令等,所以利用SMT给自己的邮箱发一封邮件**)
def sendEmail(user, content='From Python SMTP',subject='欢迎使用!'):
mail_host = "smtp.163.com" # 设置服务器
mail_user = "xxx@163.com" # 用户名
mail_pass = "xxx" # 口令
sender = 'xxx@163.com'
receivers = [user] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText(content, 'plain', 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
# print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
#用于定时关机,对得到的邮件主题进行解析,得出关机的时间
def shutdown_ontime(list_time):
print(list_time)
subject_list = list_time.split(':')
try:
h = int(subject_list[1])
m = int(subject_list[2])
except:
print('输入的格式有误,请以"定时:小时:分钟"的格式发送邮件。切记冒号是英文的冒号!')
return
if h > 24 or h < 0:
h = 0
if m > 60 or m < 0:
m = 0
# 计算秒数
s = h * 3600 + m * 60
print('距离关机还有 %d 秒' % s)
string = 'shutdown -s -t ' + str(s)
os.system(string)
time.sleep(s)
return
if __name__ == '__main__':
sendEmail(user='xxx')
checkEmailSubject()
- Docker系列教程11-使用Nexus管理Docker镜像
- Mac 配置终端环境
- 【LEETCODE】模拟面试-101-Symmetric Tree
- Docker系列教程10-使用Docker Registry管理镜像
- webapp开发调试环境--weinre配置
- AWK 深入浅出教程
- Docker系列教程09-使用Docker Hub管理镜像
- C++11基础学习系列一
- 触屏touchstart 与 click
- Linux DNS之dig利器
- Docker系列教程08-Dockerfile实战
- VirtualBox和Vmware安装增强功能
- 事件委托与阻止冒泡
- Linux网络工具之Ping命令
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简易数字频率计(verilog HDL设计)(2020维护版本)
- C++核心准则CP.111:如果真的需要好双重检查锁,使用惯用模式
- C++核心准则CP.200:使用volatile只能表明该变量是非C++内存
- C++核心准则E.2:通过抛出异常来表明函数无法执行指定的任务
- C++核心准则E.3:异常应该只用于错误处理
- [Go] GO语言实战-gin框架项目实现中英文切换
- [Go] Go语言实战-基于websocket浏览器通知的实现
- 快10年的老前端了,我还分不清 slice 和 splice,这到底是谁的锅
- 第4章 Jenkins系统用户认证配置管理
- 回答公众号留言的2个关于相关性分析的问题
- css 透明度和百分比对应值
- Qt项目DeskGirl开发
- 三日php之路 -- 第二,三天(php知识要点)
- GitLabRunner和流水线的数据采集与监控
- FPGA开源工具链