перезагрузите локальный компьютер из Python - PullRequest
3 голосов
/ 07 января 2011

Есть ли какой-нибудь способ сделать компьютер, на котором запускается программа Python, при перезагрузке? Универсальное решение хорошо, но в частности я на окнах.

Ответы [ 4 ]

12 голосов
/ 07 января 2011

Нет никакого общего способа сделать это, afaik.

Для Windows вам необходим доступ к Win32 API.Вот так:

  import win32api
  win32api.InitiateSystemShutdown()

Модуль win32api является частью pywin32 .

Для linux / os x, я думаю, вызывать команду "reboot" проще всего.

import os
os.system('reboot now')

или что-то в этом роде.

(Примечание для downvoters: os.system() имеет not устарело. Текст «Модуль подпроцесса обеспечивает более мощныйсредства для порождения новых процессов и извлечения их результатов; использование этого модуля предпочтительнее, чем использование этой функции. "Для таких простых случаев, как этот, когда вы не заинтересованы ни в получении результатов, ни в многопроцессорности, os.system() работает просто отлично).

7 голосов
/ 07 января 2011

Почему бы вам просто не вызвать команду shutdown с помощью подпроцесса?

5 голосов
/ 12 июля 2016

Вы можете перезагрузить систему Windows, используя: os.system("shutdown -t 0 -r -f")

Пример:

import os
print "REBOOTING"
os.system("shutdown -t 0 -r -f")

Измените число перед -t, чтобы изменить количество секунд до выключения.

0 голосов
/ 13 июня 2018

В стандартной библиотеке нет ничего, что позволяло бы вам сделать это напрямую, и мне неизвестны какие-либо модули, предоставляющие кроссплатформенный метод, но если вы работаете в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...