Я настроил Raspberry Pi, подключенный к светодиодной ленте, которой можно управлять с моего телефона через сервер Node, который у меня работает на RasPi. Он запускает простой скрипт Python, который устанавливает цвет.
Я хочу расширить функциональность, чтобы у меня был постоянно работающий скрипт python, и я мог бы отправлять ему цвета, чтобы он потреблял новый цвет и отображал как старый, так и новый цвет рядом. То есть скрипт python может получать команды и управлять состоянием.
Я изучал, использовать ли для этого простой цикл или демона, но я не понимаю, как непрерывно запускать скрипт и получать новые команды.
Лучше ли хранить состояние на сервере Node и продолжать отправлять множество простых команд в базовый скрипт Python или написать более сложный скрипт Python, который может получать несколько простых команд и постоянно обновлять свет?






IIUC, вам не обязательно, чтобы скрипт Python работал непрерывно. Ему просто нужно сохранить состояние, и вы можете сделать это, записав состояние в файл. Затем сценарий может просто прочитать последний файл состояния при запуске, решить, что делать дальше, выполнить действие, а затем обновить файл состояния.
Однако, если вы действительно хотите запускать скрипт непрерывно, вам нужен способ принимать команды. Самый простой способ для демона принять команду, вероятно, через сигнал, вы можете использовать пользовательский сигнал, например. SIGUSR1 и SIGUSR2 для отправки и получения этих уведомлений. Этого может быть достаточно, если вашему демону нужно принять только очень простой запрос.
Для более сложного запроса, когда вам нужно фактически принимать сообщения, вы можете прослушивать сокет Unix или прослушивать сокет TCP. В этом вам может помочь модуль сокета из стандартной библиотеки. Если вы хотите создать более сложный командный сервер, вы можете даже подумать о запуске полноценного HTTP-сервера, хотя в текущей ситуации это выглядит излишним.
Is it better to keep state in the Node server and keep sending a lot of simple commands to a basic python script or to write a more involved python script that can receive few simpler commands and continuously update the lights?
На это нет прямого ответа. В каждом конкретном случае это зависит от того, насколько сложным является состояние, как часто вам нужно менять цвет, насколько вы знакомы с языками и т. д.
Другой вариант — иметь приложение Node, вызвать скрипт Python как дочерний процесс и передать ему все необходимые переменные, и вы также можете прочитать вывод python, например:
var exec = require('child_process').exec;
var child = exec('python file.py var1 var2', function (error, stdout, stderr) {
}