有没有办法让计算机在重启时运行Python程序?通用解决方案很好,但特别是我在Windows上。
答案 0 :(得分:12)
afaik没有通用的方法。
对于Windows,您需要访问Win32 API。像这样:
import win32api
win32api.InitiateSystemShutdown()
win32api模块是pywin32的一部分。
对于linux / os x,我想调用“reboot”命令是最简单的。
import os
os.system('reboot now')
或类似的东西。
(对于downvoters注意:os.system()
不已被弃用。文本是“子进程模块提供更强大的工具来生成新进程并检索其结果;使用该模块更可取使用这个函数。“对于这样的简单情况,如果你对检索结果不感兴趣,也不想在多处理中,os.system()
工作得很好。”
答案 1 :(得分:7)
为什么不用子进程调用shutdown命令?
答案 2 :(得分:5)
您可以使用以下命令重新启动Windows系统:os.system("shutdown -t 0 -r -f")
示例:
import os
print "REBOOTING"
os.system("shutdown -t 0 -r -f")
更改-t前面的数字以更改关机前的秒数。
答案 3 :(得分:0)
标准库中没有任何内容可以直接允许您执行此操作,我不知道任何提供跨平台方法的模块,但如果您在Windows上并且不想安装任何东西(比如win32api)然后你可以使用ctypes默认模块并直接与WinAPI交互。
您可以使用ExitWindowsEx()
函数重新启动计算机(它与我的其他答案How to shudown a computer using Python几乎相同;但是十六进制值必须更改为重新启动而不是关闭)。
<强>过程:强>
首先你需要ctypes:
import ctypes
接下来按documentation:
中的说明获取user32.dll
DLL | USER32.DLL
所以:
user32 = ctypes.WinDLL('user32')
接下来,您需要调用ExitWindowsEx()
函数并插入正确的十六进制值:
user32.ExitWindowsEx(0x00000002, 0x00000000)
第一个参数(0x00000002
)关闭系统然后重新启动(参见documentation)。
第二个参数(0x00000000
)给出了系统记录的原因。可以找到完整列表here
完整代码:
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000002, 0x00000000)
关于Windows上的os.system()
方法:
win32api或ctypes答案都将以静默方式执行。 os.system("shutdown -t 0 -r -f")
会留下一条消息,说明&#34;您即将在不到一分钟的时间内退出&#34;在某些情况下这可能是不受欢迎的。
名为shutdown.bat
/ shutdown.exe
/ shutdown.cmd
的脚本旁边的文件将导致命令shutdown -t 0 -r -f
中断,调用该文件而不是系统命令。对于上面描述的wmic.exe
也是如此。
作为旁注:我构建了WinUtils(仅限Windows),这简化了一点,但它应该更快(并且不需要Ctypes),因为它是用C构建的
示例:强>
import WinUtils
WinUtils.Restart(WinUtils.SHTDN_REASON_MINOR_OTHER)