python实现电脑自动关机

初学python,想做一个自动关电脑的程序,到了晚上11点让电脑自动关机,写了一个简单的python代码。虽然只是一个简单的功能,但是经历了好几次优化的过程

第一个过程:最简单的实现定时关机的功能

from datetime import *
import os

tmNow = datetime.now()
d = date.today()
t = time(23,10,0)
shtdownTime = datetime.combine(d,t)

def ShutDown():
    while True:
        tmNow = datetime.now()
        timedDelta = (shtdownTime - tmNow).total_seconds()
        if timedDelta < 60:
            os.system('shutdown -s -f -t 59')
            break
        else:
            continue
            
if __name__ == '__main__':
    ShutDown()

上面这个代码已经实现了基本的自动关机功能。使用一个while循环实时监测当前时间距离关机时间还有多少秒,当距离关机时间<1分钟的时候,执行关机的脚本os.system('shutdown -s -f -t 59')

第二个过程:给机主一个弹框提示

但是这样不够人性化,机主也许在工作有需要保存的工作没有保存,这样突然关机导致机主的代码或者游戏进度丢失,所以我想在关机之前给机主一个弹框提示“我要关机了,赶快保存一下!”,这就需要使用win32api库,调用Windows的钩子函数弹出messageBox。改进之后的代码如下:

 1 from datetime import *
 2 import os
 3 
 4 tmNow = datetime.now()
 5 d = date.today()
 6 t = time(23,10,0)
 7 shtdownTime = datetime.combine(d,t)
 8 
 9 def ShutDown():
10     while True:
11         tmNow = datetime.now()
12         timedDelta = (shtdownTime - tmNow).total_seconds()
13         if timedDelta < 60:
14             win32api.MessageBox(win32con.NULL, u'还有59s关机,赶快保存一下!', u'温馨提醒', win32con.MB_OK)
15             os.system('shutdown -s -f -t 59')           
16             break
17         else:
18             continue
19             
20 if __name__ == '__main__':
21     ShutDown()

相比第一段代码只是新增了第15行 win32api.MessageBox(win32con.NULL, u'还有59s关机,赶快保存一下!', u'温馨提醒', win32con.MB_OK),距离开机时间<1分钟的时候,给出一个弹框提示。点击确定按钮开始执行关机脚本。

但是这样又出现了一个问题,如果机主不点击“温馨提醒”对话框的确定按钮,程序就永远也不会执行关机脚本,这样机主哪怕玩到夜里一两点也不会自动关机了。所以就有了第三个过程的改进。

第三个过程:双线程实现,一个线程用来弹出提醒框,另一个线程用来执行关机脚本,也就是我的最终代码。代码如下。

 1 #coding=utf-8
 2 "shutdown at 23:00"
 3 
 4 from datetime import *
 5 import os
 6 import win32api
 7 import win32con
 8 from threading import *
 9 
10 tmNow = datetime.now()
11 d = date.today()
12 t = time(23,10,0)
13 shtdownTime = datetime.combine(d,t)
14 
15 def ShowHint():    
16     while True:
17         tmNow = datetime.now()
18         timedDelta = (shtdownTime - tmNow).total_seconds()
19         if timedDelta < 60:
20             win32api.MessageBox(win32con.NULL, u'还有59s关机,赶快保存一下!', u'温馨提醒', win32con.MB_OK)
21             break
22         else:
23             continue
24 def ShutDown():
25     while True:
26         tmNow = datetime.now()
27         timedDelta = (shtdownTime - tmNow).total_seconds()
28         if timedDelta < 60:
29             os.system('shutdown -s -f -t 59')
30             break
31         else:
32             continue
33             
34 if __name__ == '__main__':
35     threadShowHint = threading.Thread(target=ShowHint)
36     threadShutDown = threading.Thread(target=ShutDown)
37     
38     threadShowHint.start()
39     threadShutDown.start()
View Code
原文地址:https://www.cnblogs.com/summerise8090/p/8340070.html