其实这个之前有写过,但是这次优化了一下,代码的量更少,并且加入一个开机自启动脚本。
用python做关机操作其实很简单,目的为了让python关机,
python的关机语句有:
import os
os.system("shutdown -s -t 10")
这个就是关机语句,第四个参数是时间,然后你就可以写一个脚本去执行这个语句就可以了。既你发出一个关机的指令,然后电脑判断出这个指令然后执行相应的代码。
这里我使用的是用邮件去传入执行关机的命令,你也可以使用微信,一样的道理,不过微信比邮件的步骤少,一样脚本开机自动运行,然后登录网页版微信,第一次有登录扫码后,下一次就不用了。然后电脑开机,在手机点击微信登录,然后就可以了,然后选择接受信息的地方,如果接收到一个微信消息是关机的话,电脑就关机,这样看来需要两个微信号和两部手机,所以微信关机还是比邮件关机麻烦一点的,不过还是可以操作的。
使用邮件需要首先获取邮件的授权码,在这里有详细做法Python—利用邮件控制电脑关机,实现远程关机需要两个邮箱来操作,一个是发送关机指令的邮箱,一个是接收指令的邮箱:
完整代码如下:
import time
import os,sys
from imapclient import IMAPClient
import pyzmail
def getemail():
getemailname = '接收邮件的邮箱'
password = '接收邮件的邮箱的授权码'
try:
myemail = imapobj = IMAPClient('imap.qq.com', ssl=True)
myemail.login(getemailname,password)
except:
return 0
myemail.select_folder('INBOX', readonly=False)
UIDS = []
UIDS = myemail.search(['UNSEEN'])
rawmesage = myemail.fetch(UIDS, ['BODY[]'])
for uid in UIDS:
message = pyzmail.PyzMessage.factory(rawmesage[uid][b'BODY[]'])
if message.get_subject().startswith('邮件的主题'):
link = message.text_part.get_payload().decode(message.text_part.charset)
imapobj.delete_messages(uid)
subject = message.get_subject().encode('UTF-8')
subject1 = subject.decode()
if link == "关机":
os.system("shutdown -s -t 10")
myemail.expunge()
myemail.logout()
if __name__=='__main__':
count = 0
while count<20:
num = getemail()
if num == 0:
time.sleep(10)
count_=1
else:
continue
写代码的时候唯一一个坑,在安装pyzmail的时候,需要安装的是pyzmail36,即pip install pyzmail36 然后使用的时候还是依旧import pyzmail。
其他的代码细节可在这里查看Python—利用邮件控制电脑关机,因为没有做发送邮件来做反馈的,所以这个的代码量少很多。
这里主要的重点是让脚本开机自启动。
第一步将你脚本文件名修改后缀为.pyw。
第二步右键此电脑->管理 —>任务计划程序—>任务计划程序库,在右边哪里创建任务。
然后随便输入名称,接着点击触发器,新建,将开始任务设定为登录时,确认
接着打开操作,新建,点击浏览找到你的脚本文件,确认
一般这样就可以,然后重启计算机就可以看到任务管理器进程那里有个python和python32,这样就表示成功,然后你就可以发送邮件测试一下关机了。
一般这个邮件关机脚本运行一段时间后会突然报错,主要是邮箱不让你登录的原因,登录太多次,你可以加个延时登录,这样可以增强脚本的运行时间,再加上一些结束发送个邮件给另一个邮箱的功能,或者开机发送一个开机的邮件的功能,这样会使你的的脚本更加方便的去使用,出错也知道在哪一部分有问题。