• 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
  • 相关阅读:
    【Java123】HTTP Post Form Data 传输的Java实现
    【数据库123】Oracle数据库数据实时监控
    【Java123】Java基础知识点
    【测试123】ISTQB AL
    【Git123】Git 常用命令
    [Java123] Spring
    【Java123】JavaWeb Servlet开发
    [Java123] JBoss
    [SQL123] Oracle SQL 统计一定时间间隔内的数据
    【测试123】性能测试之压力测试
  • 原文地址:https://www.cnblogs.com/summerise8090/p/8340070.html
Copyright © 2020-2023  润新知