Python使用shutdown.exe及os模块使用操作方法通过vbs和bat文件获取管理员权限进行GUI自动关机操作

定时关机是一个懒惰的人最喜欢干的事情,甚至不想按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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地摊主老袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值