Как выключить компьютер через python

Обновлено: 07.07.2024

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

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

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

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

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

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

  • 2 Это не имеет ничего общего с Python, так как shutdown /p просто отправляется в систему как команда терминала. Укажите версию своей ОС, так как параметры могут отличаться.
  • Да, конечно. Но мой вопрос в том, есть ли способ использовать модули Python? или иначе? И мне нужно запустить программу на нескольких компьютерах, поэтому версия ОС не та. Благодарность

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

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

  • 2 Подпроцесс теперь должен использоваться поверх os.system() .

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

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

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

Завершает работу интерактивного пользователя, выключает систему или выключает и перезапускает систему.

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

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

  • Получите библиотеку ctypes
  • В ExitWindowsEx обеспечивается user32.dll и должен быть загружен через WinDLL()
  • Позвоните в ExitWindowsEx() функцию и передайте необходимые параметры.

Параметры:

Все аргументы шестнадцатеричные.

Первый аргумент, который я выбрал:

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

Есть много других возможных функций, полный список смотрите в документации.

Второй аргумент должен укажите причину отключения, которая регистрируется системой. В этом случае я установил его на Other issue но есть из чего выбирать. См. Полный список.

Делаем это кроссплатформенным:

Это можно комбинировать с другими методами, чтобы сделать его кроссплатформенным. Например:

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

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

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

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

Эта линия является ее частью :

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

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

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

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

Я хочу выключить свой компьютер в скриптах matlab, когда программа будет запущена до конца. Есть ли какие-нибудь команды по этому поводу?

Один мой друг хочет автоматически выключить свой компьютер с помощью Python 3.4 (чтобы вставить программу). Кто-нибудь знает основной способ as-small-as-possible сделать это? OS: Mac OSX Yosemite Спасибо

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

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

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

Описание от MSDN:

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

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

Теперь объяснение строка за строкой:

  • Сделать библиотеке ctypes
  • ExitWindowsEx обеспечен user32.dll и должен быть загружен через WinDLL()
  • Вызовите функцию ExitWindowsEx() и передайте необходимые параметры.

Параметры:

Все аргументы являются шестнадцатеричными.

Первый аргумент, который я выбрал:

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

Есть много других возможных функций смотрите документацию для полного списка.

Второй аргумент должен указывать причину завершения работы,которая регистрируется системой. В этом случае я установил его для Other issue , но есть много вариантов на выбор. Смотрите этот полный список.

Сделать его кроссплатформенным:

Это может быть объединено с другими методами, чтобы сделать его кросс-платформенным. Например:

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

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

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

Пример :

Можно ли выключить компьютер программно? Если да, то какие функции Windows API я должен вызвать? Я хочу создать приложение, которое выключает компьютер в определенное время. В частности, я хочу выключить свой компьютер в 24:00.

Я работал с этим некоторое время и нашел несколько полезных вещей, но я еще не очень хорошо разбираюсь в AJAX. Я работаю над созданием киоска chromium-browser на Raspberry Pi (что было прекрасно), но в режиме киоска нет кнопки shutdown. Я показываю локальный файл HTML в браузере chromium и хочу.

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

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

Вот пример для отключения питания Windows :

Вот пример отключения питания Linux (по разрешению root):

Попробуйте этот фрагмент кода:

Как вы пожелаете, winapi можно использовать.

Похожие вопросы:

Я хочу включить или выключить видимость bluetooth в android с помощью кода python. Вы не могли бы мне помочь?

Вопрос 1) Как мне выключить компьютер? есть ли какое-нибудь прерывание для этого? Вопрос 2) Я слышал, что параметры питания acpi можно использовать для выключения, перезагрузки или перевода.

Я хочу выключить свой компьютер в скриптах matlab, когда программа будет запущена до конца. Есть ли какие-нибудь команды по этому поводу?

Один мой друг хочет автоматически выключить свой компьютер с помощью Python 3.4 (чтобы вставить программу). Кто-нибудь знает основной способ as-small-as-possible сделать это? OS: Mac OSX Yosemite.

Можно ли выключить компьютер программно? Если да, то какие функции Windows API я должен вызвать? Я хочу создать приложение, которое выключает компьютер в определенное время. В частности, я хочу.

Я работал с этим некоторое время и нашел несколько полезных вещей, но я еще не очень хорошо разбираюсь в AJAX. Я работаю над созданием киоска chromium-browser на Raspberry Pi (что было прекрасно).

Я искал способ перезапустить / выключить удаленный компьютер с комментарием от powershell. Традиционный командлет Restart-Computer не имеет этих параметров. потом где-то посоветовали использовать.

Как отключить компьютер в python?

Кажется, что команды, которые я попробовал, требуют доступа root. Есть ли способ отключить машину от script без повышенных привилегий?

ОТВЕТЫ

Ответ 1

Во многих дистрибутивах Linux требуются привилегии суперпользователя для выполнения shutdown или halt , но почему же, если вы сидите за своим компьютером, вы можете отключить его, не будучи пользователем root? Вы открываете меню, нажимаете "Выключение", и оно выключается, и вы не становитесь root , верно?

Что ж. обоснование этого заключается в том, что если у вас есть физический доступ к компьютеру, вы можете в значительной степени отключить шнур питания и отключить его в любом случае, поэтому в настоящее время многие дистрибутивы позволяют отключать питание, хотя доступ к локальной системной шине доступен до dbus . Проблема с dbus (или сервисы, выставленные через него, скорее)? Это постоянно меняется. Я бы порекомендовал установить средство просмотра dbus, такое как D-футы (имейте в виду: это все еще довольно сложно визуализировать, но это может помочь)

Если у вас все еще есть HAL в вашем дистрибутиве (на пути к устареванию), попробуйте это:

Это работает на Ubuntu 12.04 (я просто выключил компьютер, чтобы убедиться, что он работает). Если у вас есть что-то более новое. ну, это может не сработать. Недостаток этого метода: он очень специфичен для распределения.

ОБНОВЛЕНИЕ 1:

Я провел небольшое исследование, и похоже, что это делается в более новых версиях Ubuntu через ConsoleKit. Я протестировал приведенный ниже код в своем Ubuntu 12.04 (в котором устаревший HAL и более новый ConsoleKit), и он отключил мой компьютер:

ОБНОВЛЕНИЕ 2:

Вероятно, почему вы можете сделать это, не будучи root , заслуживает немного более широкого объяснения. Давайте сосредоточимся на более новом ConsoleKit ( HAL намного сложнее и грязнее, ИМХО).

ConsoleKit - это служба, работающая как root в вашей системе:

Подводя итог: Вы не можете выключить компьютер, не будучи root . Но вы можете сказать службе, которая работает как root , чтобы выключить систему для вас.

БОНУС:

Я прочитал в одном из ваших комментариев, что вы хотите выключить компьютер после трудоемкой задачи, чтобы предотвратить его перегрев. Знаете ли вы, что вы можете включить его в определенное время, используя RTC? (Смотрите это и это) Довольно круто, а? (Я так обрадовался, когда узнал, что могу это сделать. ) : -D

Ответ 2

выполните script с привилегиями root.

Ответ 3

Лучший способ отключить систему - использовать следующие коды

Ответ 4

любой способ закрыть. без повышенных привилегий?

Нет, нет (к счастью!).

Имейте в виду, что вы можете использовать несколько системных функций, чтобы упростить эскалацию привилегий для обычных пользователей:

Ответ 5

Просто добавьте ответ @BorrajaX для тех, кто использует логин (более новые системы fedora):

Ответ 6

Ответ 7

Если вы хотите выполнить его от root, ответ @Rahul R Dhobi прекрасно работает:

Выполнение: sudo python_script.py

В случае, если вам нужно выполнить его без привилегий root:

Ответ 8

enter image description here

Ответ 9

Я использую Fedora, и он работает со мной. все, что мне нужно сделать, это написать эту строку в терминале:

Ответ 10

Существует способ закрыть компьютер без использования повышенных разрешений.

приветствую. пишу для себя программку для выключения/перезагрузки системы по таймеру(аналог EasyShutdown под linux), ребутить систему решил через библиотеку subprocess(python) которая запускает скрипты bash в python'e, но не знаю как сделать, что бы можно было перезагрузить машину без su/sudo.

Можно через dbus и ConsoleKit


Проще через судов, а если серьёзно то добавить пользователя в группу, не помню какую так как нет возможности проверить

спасибо, буду пробовать, хотя не до конца понимаю что это за кусок кода.

зафига тебе выключать чужие машины

нее, ты не так понял :) просто что бы программка работала на разных компьютерах(под разными учетными записями), а не только у меня(потому-что я прописал права доступа)

ConsoleKit - это такой демон, обслуживащий пользовательские сессии. Им можно управлять через dbus. Только вот его вроде выпиливают сейчас повсюду. Если у тебя systemd, то фокус не прокатит. Может заглянут знатоки и подскажут, как это сделать через logind.

А пароль кто будет вводить?



которая запускает скрипты bash в python'e

может сразу на баше написать?

да, прочитал о ConsoleKit так там в разных версиях может по разному себя вести, bash не катит, т.к. это будет аплет для unity с менюшками на Gtk, даже не знаю как быть, хотелось бы универсальность программки, что бы под разными версиями запускался системы/пакетов.


Вроде бы с правами надо разбираться через polkit.


:NOPASSWD - настраивается в /etc/sudoers.

Стрёмно как-то давать беспарольный sudo даже на одну команду. Хотя может это паранойя. Но всё равно ТСу это не подходит.


второй вариант: раздели свою утилиту на две слабосвязанные части. одна часть это сервисный-юнит (запускаемый через systemd и висящий в системе постоянно), а вторая часть это клиентская часть. клиентская часть — будет связываться со своей серверной частью через dBus, например.

кстати, во втором варианте — я разумеется вижу угрозу безопасности (так как кроме именно твоей программы — связаться с серверной частью сможет также и программа злоумышленника, которая не имеет повышенных полномочий).

user_id_68054 ★★★★★ ( 28.09.14 00:56:47 )
Последнее исправление: user_id_68054 28.09.14 00:58:47 (всего исправлений: 2)

спасибо, буду пробовать, хотя не до конца понимаю что это за кусок кода.

Тогда уж не вызывать bash из python только для того, чтобы дернуть dbus-send, а использовать dbus-python.


poweroff или systemctl poweroff . По дефолту разрешения таковы, что единственный активный пользователь сможет вырубить машину без получения прав суперпользователя.

Читайте также: