Ответ 1
import os
os.system('shutdown -s')
Это будет работать для вас.
Я написал сценарий Python, который должен в конечном итоге выключить компьютер.
Эта строка является ее частью:
os.system("shutdown /p")
Это делает своего рода выключение, но остается на включенной панели управления Windows (где пользователь может переключать пользователей компьютера).
Есть ли способ полностью выключить компьютер?
Я пробовал другие os.system("shutdown ___")
безуспешно.
Есть ли другой метод, который может помочь?
import os
os.system('shutdown -s')
Это будет работать для вас.
Для Linux:
import os
os.system('sudo shutdown now')
или: если вы хотите немедленное отключение без запроса sudo
для sudo
пароля, используйте следующее для Ubuntu и подобных дистрибутивов:
os.system('systemctl poweroff')
Используя ctypes, вы можете использовать функцию ExitWindowsEx для выключения компьютера.
Описание из MSDN:
Выход из системы интерактивного пользователя, выключение системы или выключение и перезагрузка системы.
Сначала немного кода:
import ctypes
user32 = ctypes.WinDLL('user32')
user32.ExitWindowsEx(0x00000008, 0x00000000)
Теперь объяснение построчно:
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)
Единственный вариант, который действительно работает для меня без каких-либо проблем:
import os
os.system('shutdown /p /f')
Этот код Python может сделать дело:
import os
os.system('sudo shutdown -h now')