2013-04-22 2 views
2

У меня есть скрипт Python, который работает в цикле, регулярно внося коррективы в мою систему освещения. Когда я выключу свой компьютер, я бы хотел, чтобы мой скрипт обнаружил это и вообще выключил свет.Обнаружение выключения компьютера/программы в Python?

Как определить, что мой компьютер начинает закрываться в Python?

Или, предположив, что Windows отправляет Python уведомление о «времени, чтобы закрыть», как я могу перехватить это, чтобы убить мои огни и выйти из цикла?

+0

Привет, Crummy, вопросы о том, как реализовать что-то с кодом, принадлежат StackOverflow (админы должны иметь возможность его перенести). –

ответ

2

Вы должны отреагировать на сообщение WM_ENDSESSION.

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

Если вы хотите отреагировать на Спящий/Спящий режим, вам нужно будет обработать WM_POWERBROADCAST с помощью PBT_APMSUSPEND.

Но я не знаю, как это сделать в python. Я предполагаю, что это зависит от вашей инфраструктуры окон, поскольку для получения сообщений требуется наличие окна/цикла сообщений.

+0

Спасибо - ваш комментарий привел меня к http://stackoverflow.com/questions/1411186/python-windows-shutdown-events, который, я думаю, является тем, что я ищу. Цените помощь! – Crummy

7

Это неправильный способ выполнения действий при отключении системы. Задача процесса останова - прекратить выполнение процессов, а затем отключить питание; если вы попытаетесь обнаружить это, происходящее из вашей программы, и отреагируйте, получив какое-то последнее действие, это гонка между ОС и вашей программой, которая добирается до первой. Скорее всего, ваша программа будет остановлена, прежде чем ей удастся выполнить необходимые действия.

Вместо этого вы должны подключиться к обычным протоколам для выполнения действий при выключении. Это скажет утилите shutdown отправить явный сигнал в вашу программу и дождаться ее подтверждения, что даст вам достаточно времени (в пределах разумного) сделать то, что вам нужно сделать. Как точно регистрироваться для уведомления, зависит от ОС, поэтому это скорее вопрос, специфичный для ОС, а не вопрос Python.

Смежные вопросы