博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Time系列二】自动关机脚本
阅读量:4636 次
发布时间:2019-06-09

本文共 5214 字,大约阅读时间需要 17 分钟。

        今天在弄那个自动关机脚本的时候,遇到最大的麻烦就是怎么像电脑一样显示关机时间,看

了其他大神的博客,明白了原来用的是我没学过的datetime模块和time.strptime模块 ! ! !

        接下来,就让我们一点点来实现它!

        参考出处:

 

        其实说的那么高端(装逼)的自动关机, 就是调用系统的shutdown命令,当我们导入os模块时

,就把电脑的一些系统命令都导入进去了! 比如: 可以试试os.system("inconfig"), 执行后是这样的 !

是不是和启动命令行(按 Win+R —> cmd )再输入config是一样的?

   

 

-------------------------------------------------------------------------------------------------------------------

1. 所以第一步就是, 使用shutdown -s -t *

(*表示秒数,比如shutdown -s -t 3600,就是1小时后关机)

1 # coding: utf-82 3 import os4 5 setting = raw_input("Setting: ")6 os.system("shutdown -s -t %s" % setting)

2. 接下来,当然是明白各个模块的用法啦!

        还记得上一篇我们说过, 打印出当前系统时间有两个方法, 一个是按 "周-月-日 时/分/秒 年"

输出的time.ctime(), 一个是按自设的格式输出的time.strftime()

1 # coding: utf-8 2  3 import os 4 import time 5  6 # 按"周-月-日 时/分/秒 年"的格式显示 7 print time.ctime() 8  9 # 按自行设置的格式显示日期10 print time.strftime("%H:%M:%S")11 print time.strftime("%a %b %Y-%m-%d")12 print time.strftime("%Y/%m/%d %H:%M:%S")

3. 时间戳与时间转换

        怎么给定一个时间,比如2.5个小时后,我要它关机呢?想想看,当然是把2.5 * 3600转化为秒,

再用shutdown命令关机,如果是这样,那倒没什么难的,问题是,我们要这样的效果! 精确显示关机的

时间......这就需要一些模块来转换时间了!

1 # coding: utf-8 2  3 import time 4 import datetime 5  6 # str to  datetime.datetime 7 currtime = time.strftime("%Y-%m-%d %H:%M:%S") 8 dt = datetime.datetime.strptime(currtime, "%Y-%m-%d %H:%M:%S") 9 10 # datetime.datetime to time stamp(时间戳)11 time_stamp = time.mktime(dt.timetuple())12 13 # time stamp to str14 # 到这里时间戳又可以变回来了—日期15 time = time.strftime("%H:%M:%S", time.localtime(time_stamp))16 17 print currtime18 print dt19 print time_stamp20 print time

        看到没,这里关键的地方就是时间戳,意味着可以把当前的时间转换为秒数,这个秒数是从格林

尼治的1970年1月1日子夜(0点)算起的,由于北京是东八区,所以是从凌晨8点算起的,这些都不重要

,重要的是,只要我们在时间戳这里,把我们要的几小时后关机的小时数转换成对应的时间戳, 那么,

不就可以显示出几小时后的系统时间了么?

        【注意: 在其它语言里面的时间戳大部分都是指总毫秒数而非python的总秒数】

 ----------------------------------------------------------------------------------------------------------

4. 示例

    方法1:利用上面说的原理进行时间戳的转换(麻烦)

我们给完整版加个取消计划关机的功能,其实也是利用系统自带的 "shutdown -a" 命令 !

1 # coding: utf-8 2  3 import os 4 import time 5 import datetime 6  7 print u"亲爱的小主,你想要设置你的电脑几小时后关机?" 8 setting = raw_input("Setting: ") 9 setting = float(setting) * 360010 # 把当前时间格式化成 "年/月/日 时:分:秒" 的格式(str类) 11 currtime = time.strftime("%Y-%m-%d %H:%M:%S")12 13 # 把str类的时间弄成datetime.datetime类的 14 dt = datetime.datetime.strptime(currtime, "%Y-%m-%d %H:%M:%S")15 16 # 把datetime.datetime类弄成时间戳(time stamp)17 time_stamp = time.mktime(dt.timetuple())18 shuttime_stamp = time_stamp + setting19 20 # 把时间戳弄成str型的时间21 shuttime = time.strftime("%H:%M:%S", time.localtime(shuttime_stamp))22 23 # 之所以要时间戳, 就是要把关机后的时间在这里打印出来24 print u"您的爱机将在%s关机..." % shuttime25 26 os.system("shutdown -s -t %s" % int(setting))
几小时后关机

 

 

-------------------------------------------- Perfect ---------------------------Q ^ Q 完美匹配 ! !!

        不过缺点嘛就是只能指定当天关机时间, 因为当设置的关机时间早于当前系统时间时, 两者相减

去的时间的绝对值加上当前系统时间,将会导入计算的时间出错,因为我们设置的是当天的 "年/月/日",

(具体大家自己尝试)!

1 # coding: utf-8 2  3 import os 4 import time 5 import datetime 6  7 print u"可爱的小主,你想要你的电脑几点关机?" 8  9 # 将设置的时间格式化成指定格式的字符串10 # 这里如果只设置成 "时:分:秒", 后面会出现溢出错误! ! !11 setting = time.strftime("%Y-%m-%d ") + raw_input("Setting: ") + ":00"12 13 # 把当前的时间(str类)赋值给currtime 14 currtime = time.strftime("%Y-%m-%d %H:%M:%S")15 16 # 把str类转化成datetime.datetime类17 dt = datetime.datetime.strptime(currtime, "%Y-%m-%d %H:%M:%S")18 curr_dt = datetime.datetime.strptime(setting, "%Y-%m-%d %H:%M:%S")19 20 # 把datetime.datetime类的变量转化成时间戳(time stamp)21 time_stamp = time.mktime(dt.timetuple())22 curr_time_stamp = time.mktime(curr_dt.timetuple())23 24 # 把时间戳转化成时间(str类)25 seconds = time_stamp + curr_time_stamp26 minus =  abs(curr_time_stamp - time_stamp)27 28 os.system("shutdown -s -t %s" % int(minus))29 30 print u"您的电脑将在%s关机..." % setting31 32 ifshutdown = raw_input("If abolish:")33 if "y" in ifshutdown:34     os.system("shutdown -a")
指定某时某分关机

        abs()是求绝对值         

        升级版增加了取消关机和设定更精确时间关机的功能,具体功能大家可以自行扩展......

如果回复出现"y"取消的话:

 

    方法2:其实之前一直被时间戳给套住了,根本就可以不用它。简单地在小时和分钟,秒上面做加减就行了

    老规矩,先从简单地开始

1 # coding: utf-8 2  3 import os 4 import time 5  6 # raw_input()产生的是字符串,要转化成int才能加减 7 print u"亲爱的小主,你打算几个小时后关掉您的电脑!" 8 hours = raw_input("Setting: ") 9 seconds = int(hours) * 360010 11 hours = int(time.strftime("%H")) + int(hours)12 shutTime = str(hours) + time.strftime(":%M:%S")13 14 print u"您的电脑将在%s关闭" % shutTime15 os.system("shutdown -s -t %s" % seconds)16 17 isExit = raw_input(u"是否取消?(y/n) ".encode("gbk"))18 19 if "y" in isExit: 20     os.system("shutdown -a")
几小时后关机

    结果和上面的例子没什么两样,这里就不再截图了。

1 # coding: utf-8 2  3 import os, re, time 4  5 # 我们输入的是hh:mm的格式,所以用正则表达式按冒号分割成时间列表 6 # 当前时间一定要放在raw_input()之后,因为输入时间会消耗时间,而 7 # 变量curr_time数据一旦储存,就不会再变化。会产生时差。 8 print u"亲爱的小主,几时关闭您的爱机呢?" 9 shut_time = raw_input("Setting: ")10 shut_time_list = re.split(":|:", shut_time)11 12 shut_hour, shut_min = shut_time_list13 14 curr_time = time.localtime()15 curr_hour = curr_time.tm_hour16 curr_min = curr_time.tm_min17 curr_sec = curr_time.tm_sec18 19 # 距离关机的总秒数 = 设置时间当天过去的秒数 - 当前时间当天过去的秒数20 sec = int(shut_hour) * 3600 + int(shut_min) * 60 -( curr_hour * 3600 + curr_min * 60) - curr_sec21 print u"您的爱机将在%s关机" % shut_time22 os.system("shutdown -s -t %s" % sec)23 24 is_shut =  raw_input(u"是否取消?(y/n) ".encode("gbk"))25 26 if  "y" in is_shut:27     os.system("shutdown -a")
某时某分关机

 

                                                                                                                          ------------2017/1/12深夜

转载于:https://www.cnblogs.com/Ruby517/p/5828087.html

你可能感兴趣的文章
Servlet运行原理以及生命周期
查看>>
Linux学习之三-Linux系统的一些重要配置文件
查看>>
转 [JAVA] 使用 common-fileupload 实现文件上传
查看>>
十五天精通WCF——第三天 client如何知道server提供的功能清单
查看>>
构建之法阅读笔记04
查看>>
Python - selenium_WebDriver 鼠标键盘事件
查看>>
oracle创建DBLink连接
查看>>
spark+openfire即时通讯工具二次开发参考文档
查看>>
java.util.concurrent包API学习笔记
查看>>
从技术细节看美团的架构
查看>>
Odoo进销存业务学习笔记
查看>>
c++标准库 及 命名空间std
查看>>
【POJ1113】Wall(凸包)
查看>>
SD.Team颜色代码大全
查看>>
使用按钮控制HTML5背景音乐开关
查看>>
[spring-boot] 多环境配置
查看>>
mongodb插入数据获取本次插入的mongodb id
查看>>
JAVA面试相关基础知识
查看>>
自定义Spring ApplicationContext 支持动态订阅spring配置
查看>>
如何学习web前端
查看>>