我写了一个Python脚本,最终应该关闭计算机。
这一行是其中的一部分:
os.system("shutdown /p")
它会进行某种关闭,但仍保留在开启的Windows控制面板上(用户可以切换计算机用户)。
有没有办法完全关闭电脑?
我试过其他的 os.system("shutdown ___")
方法没有成功。
还有其他方法可能会有所帮助吗?
我写了一个Python脚本,最终应该关闭计算机。
这一行是其中的一部分:
os.system("shutdown /p")
它会进行某种关闭,但仍保留在开启的Windows控制面板上(用户可以切换计算机用户)。
有没有办法完全关闭电脑?
我试过其他的 os.system("shutdown ___")
方法没有成功。
还有其他方法可能会有所帮助吗?
import os
os.system('shutdown -s')
这对你有用。
对于Linux:
import os
os.system('sudo shutdown now')
或者:如果你想立即关机而没有 sudo
提示密码,使用以下Ubuntu和类似的发行版:
os.system('systemctl poweroff')
运用 ctypes的 你可以使用 ExitWindowsEx 关闭计算机的功能。
MSDN的说明:
注销交互式用户,关闭系统或关闭并重新启动系统。
首先是一些代码:
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
现在逐行解释:
ExitWindowsEx
是由提供 user32.dll
并需要通过加载 WinDLL()
ExitWindowsEx()
功能并传递必要的参数。参数:
所有参数都是十六进制。
我选择的第一个参数:
关闭系统并关闭电源。系统必须支持断电功能。
还有许多其他可能的功能 文件 获取完整清单。
第二个论点:
第二个论点 必须 给出系统记录的关闭原因。在这种情况下,我将其设置为 Other issue
但有很多可供选择。看到 这个 获取完整清单。
跨平台:
这可以与其他方法结合使其跨平台。例如:
import sys
if sys.platform == 'win32':
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
else:
import os
os.system('sudo shutdown now')
这是Windows依赖的功能(虽然Linux / Mac将具有相同的功能),但是比调用更好的解决方案 os.system()
自从调用批处理脚本 shutdown.bat
不会与命令冲突(并在此期间造成安全隐患)。
此外,它不会打扰用户的消息说 "You are about to be signed out in less than a minute"
喜欢 shutdown -s
确实如此,但是默默地执行。
作为旁注使用 子 过度 os.system()
(看到 subprocess.Popen和os.system之间的区别)
作为旁注: 我建造了 WinUtils (仅限Windows)简化了这一点,但它应该更快(并且不需要Ctypes),因为它是用C构建的。
例:
import WinUtils
WinUtils.Shutdown(WinUtils.SHTDN_REASON_MINOR_OTHER)