Tengo un problema extraño con mi puerto serie. Parece que algo ha cambiado después de las actualizaciones y el reinicio de Ubuntu.
przem@przem:~/Pulpit/bat/scripts$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
>>>
Sé que debería tener el resultado ' ' (signo vacío) de mi dispositivo, pero en lugar de eso aparece una excepción:
'el dispositivo informa que está listo para leer pero no devuelve datos (¿dispositivo desconectado o acceso múltiple al puerto?)'
Esta pregunta es una introducción a mi problema:https://stackoverflow.com/questions/32844942/serialport-doenst-work-correctly-after-ubuntu-update?noredirect=1#comment53527004_32844942
Por favor, ayúdame.
Respuesta1
Experimento el mismo problema. No parece limitarse al hardware del puerto serie. Puedes crear dos pseudo terminales usando socat:
$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/17
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/18
2015/09/30 09:46:18 socat[6296] N starting data transfer loop with FDs [3,3] and [5,5]
Puede conectarse con ambos dispositivos, por ejemplo usando cu
cu -l /dev/pts/17 -s 115200
y
cu -l /dev/pts/18 -s 115200
y enviar datos en ambas direcciones, no hay problema.
Pero la conexión con Python 2.7 falla con el mensaje de error que mencionaste
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/pts/17", 230400, timeout=0.2)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
Este código funcionó ayer antes de instalar las actualizaciones para Ubuntu 14.04.
¿Algunas ideas?
Respuesta2
No apoyo esto, pero dejé de ver estos errores después de realizar este cambio:
--- serialposix.py.stock 2015-10-03 06:53:45.241261071 -0700
+++ serialposix.py 2015-10-03 06:55:07.481262475 -0700
@@ -457,7 +457,11 @@
# Disconnected devices, at least on Linux, show the
# behavior that they are always ready to read immediately
# but reading returns nothing.
- raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ # retrying the read seems to get me past this error:
+ # [ERROR] Can't read from printer (disconnected?) (SerialException): device reports readiness to read but returned no data (device disconnected?)
+
+ #raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ pass
read.extend(buf)
return bytes(read)
Respuesta3
Esto puede ser un error del kernel. Mira aquí:https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1501240
La solución parece ser utilizar kernel 3.13.0-63-generic
.
Puede cambiar el kernel para un arranque único manteniendo presionada la tecla Mayús mientras inicia. Para que el cambio sea persistente, debe editar /etc/default/grub
:https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-anymore?rq=1