Как выключить компьютер через 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
Ответ 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 . По дефолту разрешения таковы, что единственный активный пользователь сможет вырубить машину без получения прав суперпользователя.
Читайте также: