Я делаю приложение, в котором Raspberry Pi считывает последовательные данные из файла / dev / rfcomm0. Я создал демон для прослушивания входящих соединений RFCOMM и запуска программы Python, отвечающей за чтение входящих последовательных данных с помощью вызова execvp. После инициализации демона я закрываю stdin, stdout и stderr в соответствии с руководством по демону, которое я нашел на http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html. По сути, эта ссылка говорит, что нужно сделать следующее:
- Отключить родительский процесс.
- Изменить маску режима файла (umask)
- Открыть любые журналы для записи.
- Создать уникальный идентификатор сеанса (SID)
- Изменить текущий рабочий каталог на безопасное место.
- Закрыть стандартные файловые дескрипторы.
- Ввести фактический код демона .
Мой демон не будет работать, пока я не удалю close(STDIN_FILENO)
из своего кода. Если я не удалю этот код, я получу следующую ошибку, и я не знаю, как ее исправить.
File "/home/BluetoothProject/RFCOMMOut.py", line 7, in <module>
gpio.setup(led_pin, gpio.OUT)
RuntimeError: Not running on a RPi!
Примечание. Мне удалось распечатать свою ошибку, удалив close(STDERR_FILNO)