定时关机是一个懒惰的人最喜欢干的事情,甚至不想按Alt+F4,直接用程序解决问题多好,于是,今天就用shutdown模块来编写一个自动关机的Python程序
文章目录
shutdown程序
打开cmd,输入shutdown --help
回车查看结果
发生了报错,那么在这里呢我们应该使用管理员模式运行代码,win+s输入cmd,点击使用管理员身份运行
我们可以发现,cmd果然给了我们答案
下面是我们使用的函数
1.shutdown -i
作用:显示图形用户界面(GUI)
2.shutdown -h
作用:休眠本地计算机
效果:在休眠状态下,内存的数据将会备份到硬盘中,这时候关闭电源也没有事。再次开机可能会比慢一些,但之前被备份到硬盘的数据会直接加载到内存中运行。
3.shutdown -l
作用:注销计算机
效果:当用户点击注销选项时,电脑指向系统会发出清除当前登陆用户信息的请求,注销后,用户可以登录新的账户。但注销功能不能当成重新启动来使用,它仅限于清除已登录用户的注册表及缓存信息。
4.shutdown -s
作用:关闭计算机
效果:这个功能是我们日常生活中最常用的功能,也是必须要使用的功能。点击关机后,电脑系统马上会停止运行所有程序。之后系统向主板和电源发出一种特殊的信号,切断所有设备的供电,接下来计算机完成彻底关闭。待到下次开机重新开启电脑时,操作系统会再次读取系统文件。关机和注销相比,关机是完全断电且关闭操作系统,而注销则不会。
5.shutdown -r
作用:完全关闭重启计算机
效果:重新启动计算机,速度相对于来说比较慢
6.shutdown -t
作用:将关闭前的超时时间设置为 xxx 秒。有效范围是 0-315360000 (10 年),默认值为 30。如果超时时间大于 0,则默示为/f 参数。
7.shutdown -a
作用:取消已经注册了的关机指令
编写Python程序
那么很多人就会说了,很简单呀,只用os打开cmd编写就行了,按照思路来试一下这种方法到底行不行呢?
import os # 导入os模块
os.popen("shutdown -s -t 60") # 60秒后关机
这个时候可以运行成功,但是如果在编辑器中运行的,就不一定可以运行了,那么我们要选择一种折中的方式
具体代码
import subprocess
import os
import easygui
import traceback
class ShutDown():
def __init__(self,second_time):
self.second_time = second_time
self.set_shutdown()
def runAdmin(self, cmd, timeout=1800000):
f = None
try:
bat = os.getcwd() + r"\cmd.bat"
f = open(bat, 'w')
f.write(cmd)
except Exception as e:
traceback.print_exc()
raise e
finally:
if f:
f.close()
try:
shell = os.getcwd() + r"\shell.vbs"
sp = subprocess.Popen(
shell,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print("[PID] %s: %s" % (sp.pid, cmd))
sp.wait(timeout=timeout)
self.stderr = str(sp.stderr.read().decode("gbk")).strip()
stdout = str(sp.stdout.read().decode("gbk")).strip()
if "" != self.stderr:
raise Exception(stderr)
if stdout.find("失败") > -1:
raise Exception(stdout)
except Exception as e:
raise e
def set_shutdown(self):
self.runAdmin("shutdown -s -t "+str(self.second_time))
print(self.stderr)
if __name__ == '__main__':
a = easygui.enterbox("请输入关机时间:")
#a = input("请输入关机时间:")
ShutDown(a)
这里主要是用bat批量处理文件获取管理员权限,然后返回运行
cmd.bat 文件代码
:: cmd.bat
shutdown -s -t 1
shell.vbs 文件代码
cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
path = cwd & "\cmd.bat"
Set shell = CreateObject("Shell.Application")
shell.ShellExecute path,"","","runas",1
WScript.Quit
代码演示
转载提示
如需转载,请附上原文链接:https://blog.csdn.net/qq_45030271/article/details/109001926