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

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

from datetime import *
import ostmNow = 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')breakelse:continueif __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

python实现电脑自动关机相关推荐

  1. Python写电脑自动关机程序并打包成exe文件

    嗨嗨,大家晚上好呀,我是小圆

  2. python电脑配置大概要多少钱-学python最电脑配置有要求么

    python对于电脑硬件基本没什么要求,下载python安装程序的时候,注意看下自己电脑属性是64位系统还是32位系统,再下载对应的python安装程序. 单纯学Python的话普通电脑就ok了,机器 ...

  3. python运行速度和电脑配置有关系吗-学python最电脑配置有要求么

    python对于电脑硬件基本没什么要求,下载python安装程序的时候,注意看下自己电脑属性是64位系统还是32位系统,再下载对应的python安装程序. 单纯学Python的话普通电脑就ok了,机器 ...

  4. python电脑要求-学python对电脑配置有要求么

    python对于电脑硬件基本没什么要求,下载python安装程序的时候,注意看下自己电脑属性是64位系统还是32位系统,再下载对应的python安装程序. 单纯学Python的话普通电脑就ok了,机器 ...

  5. python硬盘api-使用python获取电脑的磁盘信息方法

    使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...

  6. .计算机自动关机或重启,电脑自动关机或者重启怎么处理

    不少同学可能会遇到这样的情况,电脑运行的好好的自动就关机或者自动重新启动了,脚本之家经常接到网友类似的求助.显然不管是电脑自动关机还是电脑自动重新启动都是不正常的,那么为什么电脑会自动关机与自动重新启 ...

  7. 系统即将关机请保存关机是由nt_设置Windows电脑自动关机

    为了减少长时间沉迷电脑而忘记时间,设置Windows电脑自动关机是必要的事. 在我的电脑里,每到晚上10点都会自动关机.当然不会立刻关机,而是设置了1分钟的预留时间给自己保存一些文档资料. Windo ...

  8. Python获取电脑硬件信息及状态的实现方法

    From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...

  9. Python获取电脑硬件配置的封装类,可以获取CPU序列号、主板序列号、BIOS序列号、硬盘序列号和网卡MAC地址

    Python获取电脑硬件配置的封装类,可以获取CPU序列号.主板序列号.BIOS序列号.硬盘序列号和网卡MAC地址. myPyHardware.py # -*- coding: utf-8 -*- i ...

最新文章

  1. POJ 3683 【2-sat+求一组可行解】.cpp
  2. 浅谈JS原型与原型链(一)
  3. jQuery URL Decoder Plugin
  4. win10显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法
  5. js 事件委托深入浅出
  6. 二三星缩水软件手机版_还在抱怨三星手机不好用?用这些软件立马解决
  7. js打印线程id_浅谈python中的多线程和多进程(二)
  8. js控制文件拖拽,获取拖拽内容。
  9. python tkinter库Entry控件Text控件
  10. 解决linux下javac -version和java -version版本显示不一致
  11. Oracle 11g vs 12c 内存、优化器等默认参数对比
  12. js 连mysql 延后_详解MySQL 主从同步延迟
  13. 网吧计费系统数据库修复/网吧收银系统数据库恢复
  14. 谐波平衡 matlab,解非线性振动问题的摄动谐波平衡法
  15. 利用WinEdt修改图片格式为eps
  16. 大数据自助分析平台系列文章(深入讲解由零开始设计一个大数据自助分析平台)
  17. 极值点 驻点 鞍点 拐点
  18. 关于win10X64 连接oracle
  19. 折腾开源WRT的AC无线路由之路-1
  20. Hexo的Next主题配置

热门文章

  1. [C#复习向整合]object与装箱拆箱
  2. ygopro源码分析3:解剖
  3. Jmeter修改颜色与字体大小
  4. 无线传感网初识及其结构示意图
  5. Linux怎么修改菜单栏字体大小,调整 GRUB 启动菜单和虚拟终端的字体大小
  6. 华为荣耀20和x10比较_荣耀20pro与荣耀x10哪个好-荣耀20pro与荣耀x10对比测评
  7. 熟练使用excel,并且知道excel能够实现什么
  8. 计算机远程连接提示凭证不工作,连接远程桌面提示您的凭证不工作怎么办
  9. 移动开发---跟我学ios开发入门1
  10. 柴油发电机的运作方式