Как выключить компьютер с помощью Python

Я написал сценарий Python, который должен в конечном итоге выключить компьютер.

Эта строка является ее частью:

os.system("shutdown /p")

Это делает своего рода выключение, но остается на включенной панели управления Windows (где пользователь может переключать пользователей компьютера).

Есть ли способ полностью выключить компьютер?

Я пробовал другие os.system("shutdown ___") безуспешно.

Есть ли другой метод, который может помочь?

Ответ 1

import os
os.system('shutdown -s')

Это будет работать для вас.

Ответ 2

Для Linux:

import os
os.system('sudo shutdown now')

или: если вы хотите немедленное отключение без запроса sudo для sudo пароля, используйте следующее для Ubuntu и подобных дистрибутивов:

os.system('systemctl poweroff') 

Ответ 3

Используя ctypes, вы можете использовать функцию ExitWindowsEx для выключения компьютера.

Описание из MSDN:

Выход из системы интерактивного пользователя, выключение системы или выключение и перезагрузка системы.


Сначала немного кода:

import ctypes

user32 = ctypes.WinDLL('user32')

user32.ExitWindowsEx(0x00000008, 0x00000000)

Теперь объяснение построчно:

  • Получить библиотеку 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')

Это зависимая от Windows функция (хотя Linux/Mac будет иметь аналог), но это лучшее решение, чем вызов os.system() поскольку пакетный скрипт с именем shutdown.bat не будет конфликтовать с командой (и вызывать угрозу безопасности в тем временем).

Кроме того, он не беспокоит пользователей сообщением "You are about to be signed out in less than a minute" как shutdown -s делает shutdown -s, но выполняется без вывода сообщений.

В качестве дополнительного примечания используйте подпроцесс над os.system() (см. Различие между subprocess.Popen и os.system)


В качестве примечания: я создал WinUtils (только для Windows), который немного упрощает это, однако он должен быть быстрее (и не требует Ctypes), поскольку он встроен в C.

Пример:

import WinUtils
WinUtils.Shutdown(WinUtils.SHTDN_REASON_MINOR_OTHER)

Ответ 4

Единственный вариант, который действительно работает для меня без каких-либо проблем:

import os
os.system('shutdown /p /f')

Ответ 5

Этот код Python может сделать дело:

import os
os.system('sudo shutdown -h now')