本文概述
- 要求
- 重新开始
无论如何, 你都有自己的理由来重启计算机, 在本文中, 我们将向你展示如何使用Python重启计算机。
要求
- pywin32安装在执行的机器上。
ImportError: no module named win32api
要在Windows上安装pywin32, 请转到此处的Source Forge中的构建存储库。在列表中选择最新版本(到本文的日期为220), 然后将显示分发列表:x86或x64
文章图片
安装与你的python和Windows平台版本(x86或x64)兼容的发行版。
重新开始 你可能已经找到了使用os模块并执行系统外壳模块的一些解决方案, 这是著名的shutdown命令:
import osos.system("shutdown \r")
【如何在Windows中使用Python重新启动本地或网络计算机】但是, 对于某些Windows用户, 此解决方案无法正常工作。
为避免任何不兼容, 我们将直接与win32api合作, 这将使我们实现目标。
如需求中所述, 你需要在计算机上安装pywin32, 以防止执行时出错。
现在, 以下代码提供了使用python重新启动pc(并在需要时中止它)所需的一切:
# reboot.pyimport win32securityimport win32apiimport sysimport timefrom ntsecuritycon import *def AdjustPrivilege(priv, enable=1):# Get the process tokenflags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERYhtoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)# Get the ID for the system shutdown privilege.idd = win32security.LookupPrivilegeValue(None, priv)# Now obtain the privilege for this process.# Create a list of the privileges to be added.if enable:newPrivileges = [(idd, SE_PRIVILEGE_ENABLED)]else:newPrivileges = [(idd, 0)]# and make the adjustmentwin32security.AdjustTokenPrivileges(htoken, 0, newPrivileges)def RebootServer(user=None, message='Rebooting', timeout=30, bForce=0, bReboot=1):AdjustPrivilege(SE_SHUTDOWN_NAME)try:win32api.InitiateSystemShutdown(user, message, timeout, bForce, bReboot)finally:# Now we remove the privilege we just added.AdjustPrivilege(SE_SHUTDOWN_NAME, 0)def AbortReboot():AdjustPrivilege(SE_SHUTDOWN_NAME)try:win32api.AbortSystemShutdown(None)finally:AdjustPrivilege(SE_SHUTDOWN_NAME, 0)
2个主要功能是RebootServer和AbortReboot。 AdjustPrivilege将授予所需的权限以重新引导系统。请注意, RebootServer功能的超时时间为30秒(计算机将在30秒后重新启动), 请根据需要进行更改。
要重新启动计算机(或网络计算机), 请使用RebootServer函数:
# Restart this PC (actual, as first parameter doesn't exist)RebootServer()# Restart the network PC named "Terminator" or the direct IP to restart itRebootServer("Terminator")# Restart this PC (actual) with all parameters :# User: None # Message# Time in seconds# Force restart# restart immediately after shutting down# Read more about the InitiateSystemShutdown function here : https://msdn.microsoft.com/en-us/library/windows/desktop/aa376873(v=vs.85).aspxRebootServer(None, "Be careful, the computer will be restarted in 30 seconds", 30, 0, 1)
文章图片
(重新启动警告并重新启动中止的消息)
你可以使用更动态的示例进行测试, 执行以下代码:
- 30秒后重新启动。
- 等待10秒钟。
- 10秒后中止重新启动。
# Reboot computerRebootServer()# Wait 10 secondstime.sleep(10)print ('Aborting shutdown')# Abort shutdown before its executionAbortReboot()
正如代码本身所说的那样, 现在继续在你的项目中工作, 玩得开心!
推荐阅读
- 如何使用浏览器中的JavaScript防止破坏者被发现
- 如何在JavaScript中将数字转换为单词(数字拼写)
- 如何检查数组的元素是否是JavaScript循环中的最后一个元素
- 如何将”this”上下文绑定到扩展React.Component的类中的自定义函数
- 参数对象如何在javascript中工作
- Linux(程序设计):27---iconv库(转换字符编码)
- 六mysql日志管理
- Window10用CMD修改取消administrator密码
- Linux(程序设计):26---字符集与字符编码概述(附Unicode字符集实现原理)