Мне нужно обработать событие, когда начинается процесс выключения (например, при длительном нажатии на кнопку груди робота или при критически низком уровне заряда батареи). Проблема в том, что я не нашел способа обработать событие shutdown / poweroff. Ты хоть представляешь, как это можно сделать удобным способом?
Как я могу обработать событие отключения робота Pepper?
Ответы (1)
К сожалению, это будет невозможно, так как, когда вы активируете завершение работы, naoqi также выйдет и уничтожит вашу службу.
Если вы кодируете на C ++, вы можете использовать деструктор, но подходящего эквивалента для python нет ...
Альтернативой было бы выполнение некоторого кода, когда ваш скрипт завершает работу по любой причине. Для этого вы можете запустить свой скрипт как службу и дождаться «конца» с помощью qiApplication.run (). Этот метод будет просто блокироваться, пока naoqi не попросит вашу службу выйти.
Примечание: в случае завершения работы все службы будут убиты, поэтому вы не можете запускать какие-либо команды из API робота (поскольку они, вероятно, больше не доступны!)
person
JLS
schedule
27.07.2018
выполнить какой-то код, когда ваш скрипт завершится, по какой-то причине, по хорошей привычке. Другой способ - поймать событие низкого заряда батареи, а также кнопку нажатия. и / или установить демон завершения работы в системе Linux. например, как описано там; opensource.com/life/16/11/running-commands-shutdown- linux
- person Alexandre Mazel; 30.07.2018
@AlexandreMazel, эта статья очень полезна, но, к сожалению, файловая система
/usr/lib/systemd/system-shutdown
доступна только для чтения, и у меня нет прав root для запуска chmod
.
- person dim; 01.08.2018
@JLS, На самом деле можно обработать выключение или выход из программы с помощью Python
signal
. Я нашел пример здесь. Работает - уже тестировал. Оказалось, что Python - гораздо более мощный язык, чем я думал.
- person dim; 17.08.2018
Хороший! Тогда я думаю, это тоже сработает :) спасибо @dim, скрипт все равно будет остановлен ОС, поэтому он, вероятно, отправит сигнал
- person JLS; 20.08.2018