
Автоматизация завершения работы системы через Python полезна при создании скриптов, которые выполняют задачи без участия пользователя. Для этого язык предоставляет возможность обращаться к системным командам с помощью встроенного модуля os и метода system().
На Windows применяется команда shutdown /s /t 0, где параметр /s указывает на завершение работы, а /t 0 задаёт таймер в секундах. На Linux и macOS используется команда shutdown now, которая требует прав администратора.
Скрипт можно встроить в программу, которая должна завершить работу компьютера после выполнения вычислений, тестов или резервного копирования. Чтобы избежать случайного выключения, рекомендуется добавлять проверки и подтверждения перед вызовом команды.
Команда shutdown в Windows через os.system
Для завершения работы Windows из Python используется вызов системной команды shutdown через функцию os.system(). Базовый пример:
import os
os.system("shutdown /s /t 0")
/s – завершение работы, /t – таймер в секундах. Значение 0 означает немедленное выключение.
Если требуется перезагрузка, используется:
os.system("shutdown /r /t 0")
Для отмены запланированного выключения подходит команда:
os.system("shutdown /a")
Рекомендуется запускать скрипт от имени администратора, иначе выполнение может быть заблокировано. Параметры можно комбинировать, например /s /f /t 30, где /f принудительно закрывает приложения, а 30 задаёт задержку в секундах.
Выключение компьютера в Linux с помощью shutdown
Команда shutdown позволяет завершить работу системы из Python через вызов терминала. Для немедленного выключения можно использовать:
os.system("shutdown -h now")
Ключ -h означает остановку системы, а now указывает на мгновенное выполнение. Если требуется задержка, можно задать время в минутах:
os.system("shutdown -h +5")
Чтобы выполнить команду, нужны права администратора. В случае запуска скрипта от обычного пользователя необходимо использовать sudo, настроив разрешения в /etc/sudoers, например:
username ALL=(ALL) NOPASSWD: /sbin/shutdown
Для отмены ранее заданного завершения работы применяется:
os.system("shutdown -c")
При использовании shutdown в Python важно учитывать дистрибутив: путь к команде может различаться. Проверить расположение можно через which shutdown.
Применение os.system для перезагрузки вместо выключения

Вместо команды для выключения можно вызвать системный вызов на перезагрузку. В Windows используется:
os.system("shutdown /r /t 0")
Ключ /r задаёт перезапуск, а /t 0 отключает задержку. Изменив число после /t, можно указать время ожидания в секундах.
В Linux и macOS применяется:
os.system("sudo reboot")
Для выполнения без пароля требуется настроить sudoers. В противном случае при запуске из Python будет запрошен ввод пароля.
Команда reboot обеспечивает немедленную перезагрузку. Если требуется задержка, можно использовать shutdown -r +5, где число обозначает минуты до перезапуска.
Остановка работы macOS через команду osascript

В macOS для завершения работы можно вызвать системную команду через AppleScript. В Python это выполняется с помощью модуля os, который позволяет запускать внешние процессы.
Пример кода:
import os
os.system("osascript -e 'tell application \"System Events\" to shut down'")
Команда osascript запускает AppleScript, где инструкция tell application "System Events" to shut down инициирует выключение компьютера. Для корректного выполнения требуется наличие прав администратора. Если они отсутствуют, система запросит пароль.
При необходимости можно использовать вариант для перезагрузки:
os.system("osascript -e 'tell application \"System Events\" to restart'")
Такой подход удобен, когда нужно управлять питанием macOS в автоматизированных сценариях без вызова стандартных диалогов.
Использование subprocess вместо os.system
Пример завершения работы Windows через subprocess:
import subprocess
subprocess.run(["shutdown", "/s", "/t", "0"], check=True)
В Linux или macOS можно использовать:
import subprocess
subprocess.run(["shutdown", "-h", "now"], check=True)
check=Trueвызывает исключениеCalledProcessError, если команда завершается с ненулевым кодом возврата.- Аргументы передаются списком, что исключает проблемы с пробелами и кавычками.
Использование subprocess предпочтительнее, так как оно безопаснее, поддерживает гибкие настройки и лучше подходит для кроссплатформенных сценариев.
Задержка перед выключением с помощью time.sleep

Для реализации паузы перед выключением компьютера в Python используется функция time.sleep(). Она приостанавливает выполнение скрипта на заданное количество секунд. Это позволяет подготовить систему или завершить важные процессы перед завершением работы.
Пример кода для Windows с задержкой 60 секунд:
import os
import time
time.sleep(60) # задержка в секундах
os.system("shutdown /s /t 0")
Для Linux или macOS команда завершения работы отличается:
import os
import time
time.sleep(120) # задержка в 2 минуты
os.system("sudo shutdown -h now")
Следует учитывать ограничения time.sleep():
| Особенность | Описание |
|---|---|
| Точность | Функция гарантирует приостановку не менее указанного времени. Фактическая задержка может быть немного больше из-за системной нагрузки. |
| Приостановка потоков | Все действия текущего потока блокируются. Для многозадачных приложений лучше использовать планировщик задач или асинхронные подходы. |
| Завершение вручную | Если требуется прервать задержку, можно использовать KeyboardInterrupt или обработку сигналов. |
Практическая рекомендация: для критических процессов перед выключением лучше проверять состояние задач в цикле с короткими интервалами и использовать time.sleep(1) вместо одной длительной паузы. Это позволяет безопасно завершить важные операции и избежать потери данных.
Создание функции для универсального выключения

Для универсального выключения компьютера через Python важно учитывать операционную систему. Наиболее распространённые платформы – Windows, macOS и Linux. Функция должна определять ОС и выполнять соответствующую команду.
Пример функции с использованием модуля os:
import os
import platform
def shutdown_computer():
system = platform.system()
if system == "Windows":
os.system("shutdown /s /t 0")
elif system == "Linux" or system == "Darwin":
os.system("sudo shutdown -h now")
else:
raise OSError("Операционная система не поддерживается")
Рекомендации при использовании функции:
- На Linux и macOS требуется права суперпользователя для выполнения команды выключения.
- Для тестирования функции используйте команду с задержкой, например,
"shutdown /s /t 60"на Windows, чтобы иметь возможность отмены. - Можно расширить функцию для перезагрузки или выхода из сеанса, добавив отдельные условия для
restartиlogout. - Использование модуля
subprocessвместоos.systemповышает контроль над выполнением и обработкой ошибок.
Пример с subprocess:
import subprocess
def shutdown_computer():
system = platform.system()
try:
if system == "Windows":
subprocess.run(["shutdown", "/s", "/t", "0"], check=True)
elif system == "Linux" or system == "Darwin":
subprocess.run(["sudo", "shutdown", "-h", "now"], check=True)
else:
raise OSError("ОС не поддерживается")
except subprocess.CalledProcessError as e:
print(f"Ошибка при выполнении команды: {e}")
Функция становится универсальной благодаря определению ОС, обработке ошибок и возможности адаптации под разные сценарии выключения.
Запуск скрипта с правами администратора
Для выполнения операций выключения компьютера через Python на Windows необходимы права администратора, иначе команда `os.system(«shutdown /s /t 0»)` завершится с ошибкой. На Windows можно использовать модуль `ctypes` для запроса повышения прав. Пример:
import ctypes, sys
if not ctypes.windll.shell32.IsUserAnAdmin():
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
sys.exit()
Этот код проверяет, запущен ли скрипт с правами администратора. Если нет, он повторно запускает себя с повышенными привилегиями.
На Linux и macOS команды выключения требуют `sudo`. В Python можно использовать `subprocess` с `sudo`, но выполнение скрипта без ввода пароля требует настройки файла `/etc/sudoers`. Пример вызова:
import subprocess
subprocess.run(["sudo", "shutdown", "-h", "now"])
Рекомендуется проверять наличие прав перед вызовом команд, чтобы избежать прерывания работы скрипта из-за ошибок привилегий.
Для удобства на Windows можно создать ярлык с настройкой «Запуск от имени администратора» или использовать планировщик заданий для автоматического выполнения скрипта с нужными правами.
Вопрос-ответ:
Можно ли выключить компьютер через Python на Windows без установки дополнительных библиотек?
Да, можно. Для этого используется встроенный модуль os. Например, команда os.system("shutdown /s /t 0") отправит сигнал операционной системе на выключение компьютера сразу после выполнения скрипта.
Как сделать, чтобы компьютер выключался через Python с задержкой, например, через 1 минуту?
Для этого в команде shutdown нужно указать параметр /t с временем задержки в секундах. В Python это можно написать так: os.system("shutdown /s /t 60"). В этом случае система выключится через 60 секунд после запуска команды.
Можно ли отменить запланированное выключение через Python?
Да, отмена возможна. На Windows для этого используется команда shutdown /a. В Python она выполняется через os.system("shutdown /a"). Команда должна быть вызвана до того, как завершится отсчет таймера выключения.
Какие есть альтернативы методу os.system для выключения компьютера через Python?
Кроме os.system, можно использовать модуль subprocess, который позволяет запускать системные команды с более точным контролем. Пример: subprocess.run(["shutdown", "/s", "/t", "0"]). Этот подход считается более безопасным и гибким, особенно если нужно обработать возможные ошибки при выполнении команды.
