У меня проблема с правилом udev. Я использую Raspbian Buster с ядром 4.19.93-v7 + # 1290. Во-первых, если я выполняю скрипт вручную, он работает. Правило udev также выполняет сценарий, но прерывает отправку обновленного пакета. (Я отправлю пакет обновлений на localhost, который регистрирует другая программа). Вот рабочий скрипт с отладочным кодом:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Import der notwendigen Bibliotheken
import os
import sys
import getpass
import socket
f = open('/home/pi/scripts/keypad/client.txt','a')
f.write('Starting Script from Udev-Rule as user: ')
f.write(str(getpass.getuser()))
#f.write('\n')
f.close()
try:
# Serververbindung öffnen, an Port binden und auf Lauschen stellen
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto('1', ('127.0.0.1', 50000))
except:
f=open('/home/pi/scripts/keypad/client.txt','a')
f.write('\n')
f.write(str(sys.exc_info()[0]))
f.write(str(sys.exc_info()[1]))
f.write(str(sys.exc_info()[2]))
f.write('\n')
f.close()
f = open('/home/pi/scripts/keypad/client.txt','a')
f.write('End of Script from Udev-Rule\n')
f.write('\n')
f.write('\n')
f.close()
Если я, но мое устройство в Rasbperry, скрипт будет исключен и прерван , Здесь вы не можете увидеть, что я записываю:
Starting Script from Udev-Rule as user: root
<class 'socket.error'>
[Errno 1] Operation not permitted
<traceback object at 0x76c36260>
End of Script from Udev-Rule
Если я сделаю это вручную, скрипт будет работать отлично. Я также попытался заменить код простой командой bash "echo" 1 "| n c -w1 -u 127.0.0.1 50000" . Но результат тот же. Вручную работает, если udev не работает.
У кого-нибудь есть идея?