如何使用Python关闭计算机

Ben*_*n L 12 python windows cmd shutdown

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

这一行是其中的一部分:

os.system("shutdown /p")
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

shi*_*791 13

import os
os.system('shutdown -s')
Run Code Online (Sandbox Code Playgroud)

这对你有用.

  • 这样做的一个问题是,它留下了一条消息,说"你将在不到一分钟的时间内退出".另一个原因是,如果有人将带有名称`shutdown.bat`的批处理脚本放在脚本中,它将无法工作,这也是一个安全隐患,因为该文件将被执行.现在应该在`os.system()`上使用[Subprocess](https://docs.python.org/3/library/subprocess.html). (2认同)
  • 您可以避免该消息-os.system('shutdown -s -t 0') (2认同)

Mtl*_*Dev 7

对于Linux:

import os
os.system('sudo shutdown now')
Run Code Online (Sandbox Code Playgroud)

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

os.system('systemctl poweroff') 
Run Code Online (Sandbox Code Playgroud)

  • [subprocess](https://docs.python.org/3/library/subprocess.html)现在应该在`os.system()`上使用。 (2认同)

Sim*_*mon 5

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

来自 MSDN 的描述:

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


首先是一些代码:

import ctypes

user32 = ctypes.WinDLL('user32')

user32.ExitWindowsEx(0x00000008, 0x00000000)
Run Code Online (Sandbox Code Playgroud)

现在逐行解释:

  • 获取 ctypes 库
  • 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')
Run Code Online (Sandbox Code Playgroud)

这是一个 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)
Run Code Online (Sandbox Code Playgroud)


小智 5

Python 文档建议使用 subprocess 而不是 os.system。它打算替换 os.system 等旧模块。

所以,使用这个:

import subprocess
subprocess.run(["shutdown", "-s"])
Run Code Online (Sandbox Code Playgroud)

对于linux用户来说-s不是必需的,他们可以直接使用

import subprocess
subprocess.run(["shutdown"])
Run Code Online (Sandbox Code Playgroud)