Как я могу обработать событие отключения робота Pepper?

Мне нужно обработать событие, когда начинается процесс выключения (например, при длительном нажатии на кнопку груди робота или при критически низком уровне заряда батареи). Проблема в том, что я не нашел способа обработать событие shutdown / poweroff. Ты хоть представляешь, как это можно сделать удобным способом?


person dim    schedule 24.07.2018    source источник


Ответы (1)


К сожалению, это будет невозможно, так как, когда вы активируете завершение работы, naoqi также выйдет и уничтожит вашу службу.

Если вы кодируете на C ++, вы можете использовать деструктор, но подходящего эквивалента для python нет ...

Альтернативой было бы выполнение некоторого кода, когда ваш скрипт завершает работу по любой причине. Для этого вы можете запустить свой скрипт как службу и дождаться «конца» с помощью qiApplication.run (). Этот метод будет просто блокироваться, пока naoqi не попросит вашу службу выйти.

Примечание: в случае завершения работы все службы будут убиты, поэтому вы не можете запускать какие-либо команды из API робота (поскольку они, вероятно, больше не доступны!)

person JLS    schedule 27.07.2018
comment
выполнить какой-то код, когда ваш скрипт завершится, по какой-то причине, по хорошей привычке. Другой способ - поймать событие низкого заряда батареи, а также кнопку нажатия. и / или установить демон завершения работы в системе Linux. например, как описано там; opensource.com/life/16/11/running-commands-shutdown- linux - person Alexandre Mazel; 30.07.2018
comment
@AlexandreMazel, эта статья очень полезна, но, к сожалению, файловая система /usr/lib/systemd/system-shutdown доступна только для чтения, и у меня нет прав root для запуска chmod. - person dim; 01.08.2018
comment
@JLS, На самом деле можно обработать выключение или выход из программы с помощью Python signal. Я нашел пример здесь. Работает - уже тестировал. Оказалось, что Python - гораздо более мощный язык, чем я думал. - person dim; 17.08.2018
comment
Хороший! Тогда я думаю, это тоже сработает :) спасибо @dim, скрипт все равно будет остановлен ОС, поэтому он, вероятно, отправит сигнал - person JLS; 20.08.2018