Tengo un lector de tarjetas RFID rc522 conectado a mi Raspberry pi 3. He escrito un programa Python que escribe el número de tarjeta de la tarjeta registrada en un archivo. Eso está funcionando bien. También he creado un "servicio systemd" que inicia este programa de Python al iniciar el sistema. Eso también funciona bien. Escribe los números de tarjeta en el archivo. Pero solo después de que el sistema se apague normalmente. Cuando el sistema se apaga inesperadamente, los números de tarjeta no se escriben en el archivo. Puedo registrar tarjetas todo el día, pero cuando el sistema se apaga inesperadamente, todos los números de tarjeta que he registrado desaparecen. Esto sucede solo cuando el "servicio systemd" inicia el programa. Cuando inicio el programa yo mismo, escribe todo en el archivo inmediatamente. Ese también es el caso cuando el sistema se cierra de forma inesperada. Todos los números de tarjeta se han escrito en el archivo. Supongo que cuando el servicio systemd inicia el programa, los números de tarjeta registrados permanecen en la memoria hasta que el sistema se apaga normalmente. ¿Hay alguna manera de forzar la escritura en el archivo cuando lo inicia el servicio systemd y no se guarda en la memoria? También lo probé con un trabajo crontab pero tiene el mismo problema. El código para escribir en el archivo es:
with open(path and filename, "a") as file: file.write(cardnumber)La respuesta a mi problema fue como dijo @stark. De hecho, tuve que vaciar () el archivo. Pero también tuve que agregar después de ese comando el comando "os.fsync()". Y ese último mandato es esencial. De lo contrario, la descarga no se activará. Esa respuesta que encontré en esta pregunta en Stackoverflow:¿con qué frecuencia se vacía Python en el archivo ? Ahora, cuando agrego un número de tarjeta e inmediatamente después, el sistema apaga inesperadamente ese número de tarjeta que se escribió en el archivo. Mi código ahora se ve así:
with open('path and filename', 'a') as file: file.write('text\n') file.flush() os.fsync(file)