В стандартной библиотеке нет ничего, что позволяло бы вам сделать это напрямую, и мне неизвестны какие-либо модули, предоставляющие кроссплатформенный метод, но если вы работаете в Windows и не хотите ничего устанавливать(например, win32api), тогда вы можете использовать модуль по умолчанию ctypes и напрямую взаимодействовать с WinAPI.
Вы можете использовать функцию ExitWindowsEx()
для перезапускакомпьютер (это почти так же, как мой другой ответ Как отключить компьютер с помощью Python ; однако шестнадцатеричное значение должно быть изменено для перезапуска, а не выключения).
Процесс:
Сначала вам понадобятся ctypes:
import ctypes
Затем получите user32.dll
, как описано в документации :
DLL |User32.dll
Итак:
user32 = ctypes.WinDLL('user32')
Далее необходимо вызвать функцию ExitWindowsEx()
и ввести правильные шестнадцатеричные значения:
user32.ExitWindowsEx(0x00000002, 0x00000000)
Первый аргумент (0x00000002
) выключает систему, а затем перезапускается (см. документация ).
Второй аргумент (0x00000000
) дает причину для регистрации в системе.Полный список можно найти здесь
Полный код:
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000002, 0x00000000)
О os.system()
метод в Windows:
Ответы win32api или ctypes будут выполняться молча.os.system("shutdown -t 0 -r -f")
оставит сообщение о том, что «Вы собираетесь выйти менее чем за минуту», что может быть нежелательно в некоторых случаях.
Файл вместе со сценарием с именем 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)