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)
这对你有用.
对于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)
使用ctypes,您可以使用ExitWindowsEx函数关闭计算机。
来自 MSDN 的描述:
注销交互式用户、关闭系统或关闭并重新启动系统。
首先是一些代码:
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
Run Code Online (Sandbox Code Playgroud)
现在逐行解释:
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)
| 归档时间: |
|
| 查看次数: |
36120 次 |
| 最近记录: |