python实现电脑⾃动关机
初学python,想做⼀个⾃动关电脑的程序,到了晚上11点让电脑⾃动关机,写了⼀个简单的python代码。虽然只是⼀个简单的功能,但是经历了好⼏次优化的过程
第⼀个过程:最简单的实现定时关机的功能
from datetime import *
import os
tmNow = w()
d = day()
t = time(23,10,0)
shtdownTime = datetimebine(d,t)
def ShutDown():
while True:
tmNow = w()
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。改进之后的代码如下:
1from datetime import *
2import os
3
4 tmNow = w()
5 d = day()
6 t = time(23,10,0)
7 shtdownTime = datetimebine(d,t)
8
9def ShutDown():
10while True:
11 tmNow = w()
12 timedDelta = (shtdownTime - tmNow).total_seconds()
13if timedDelta < 60:
14 win32api.MessageBox(win32con.NULL, u'还有59s关机,赶快保存⼀下!', u'温馨提醒', win32con.MB_OK)
15 os.system('shutdown -s -f -t 59')
16break
17else:
18continue
19
20if__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
4from datetime import *
5import os
6import win32api
7import win32con
8from threading import *
9
10 tmNow = w()
11 d = day()
12 t = time(23,10,0)
13 shtdownTime = datetimebine(d,t)
14
15def ShowHint():
16while True:
17 tmNow = w()
18 timedDelta = (shtdownTime - tmNow).total_seconds()
19if timedDelta < 60:
20 win32api.MessageBox(win32con.NULL, u'还有59s关机,赶快保存⼀下!', u'温馨提醒', win32con.MB_OK) 21break
22else:
23continue
24def ShutDown():
25while True:
26 tmNow = w()
27 timedDelta = (shtdownTime - tmNow).total_seconds()
28if timedDelta < 60:
29 os.system('shutdown -s -f -t 59')
30break
31else:
32continue
33
34if__name__ == '__main__':
35 threadShowHint = threading.Thread(target=ShowHint)
36 threadShutDown = threading.Thread(target=ShutDown)
37
38 threadShowHint.start()
39 threadShutDown.start()
View Code
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论