如何使用Python关闭计算机

问题描述 投票:12回答:5

我写了一个Python脚本,最终应该关闭计算机。

这一行是其中的一部分:

os.system("shutdown /p")

它会进行某种关闭,但仍保留在开启的Windows控制面板上(用户可以切换计算机用户)。

有没有办法完全关闭电脑?

我尝试过其他os.system("shutdown ___")方法但没有成功。

还有其他方法可能会有所帮助吗?

python windows cmd shutdown
5个回答
13
投票
import os
os.system('shutdown -s')

这对你有用。


7
投票

对于Linux:

import os
os.system('sudo shutdown now')

或者:如果你想在没有sudo提示密码的情况下立即关机,请使用以下Ubuntu和类似的发行版:

os.system('systemctl poweroff') 

2
投票

对我来说真正有用的唯一变种没有任何问题:

import os
os.system('shutdown /p /f')

1
投票

使用ctypes你可以使用ExitWindowsEx函数关闭计算机。

MSDN的说明:

注销交互式用户,关闭系统或关闭并重新启动系统。


首先是一些代码:

import ctypes

user32 = ctypes.WinDLL('user32')

user32.ExitWindowsEx(0x00000008, 0x00000000)

现在逐行解释:

  • 获取ctypes库
  • ExitWindowsExuser32.dll提供,需要通过WinDLL()加载
  • 调用ExitWindowsEx()函数并传递必要的参数。

参数:

所有参数都是十六进制。

我选择的第一个参数:

关闭系统并关闭电源。系统必须支持断电功能。

还有许多其他可能的功能,请参阅the documentation以获取完整列表。

第二个论点:

第二个参数必须给出关闭的原因,该原因由系统记录。在这种情况下,我将它设置为Other issue但有很多可供选择。有关完整列表,请参阅this

跨平台:

这可以与其他方法结合使其跨平台。例如:

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那样,但是默默地执行。

作为旁注,使用subprocess而不是os.system()(参见Difference between subprocess.Popen and os.system


作为旁注:我构建了WinUtils(仅限Windows),这简化了一点,但它应该更快(并且不需要Ctypes),因为它是用C构建的。

例:

import WinUtils
WinUtils.Shutdown(WinUtils.SHTDN_REASON_MINOR_OTHER)

0
投票

这个Python代码可能做的事情:

import os
os.system('sudo shutdown -h now')
© www.soinside.com 2019 - 2024. All rights reserved.