pySerial inWaiting devuelve un número incorrecto de bytes

Tengo un programa simple para probar la funcionalidad serial. Mi dispositivo serial reacciona a dos entradas. Si el usuario ingresa 'a', responde con 'fg'. Si el usuario ingresa cualquier otro carácter / byte, responde con 'z'. Si envío 'b' al dispositivo serie, devolverá 'z' muy bien. Cuando envío 'a', debería devolver tanto 'f' como 'g', así que dos bytes en lugar de uno.

Ver código a continuación.

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS
    )

ser.write('a')
byteData = ser.read(1) # read one, blocking
moreBytes = ser.inWaiting()

if moreBytes:
    byteData = byteData + ser.read(moreBytes)
    print byteData

print byteData


ser.close()

La salida es:

user@ubuntu:~/code/native$ ./serialTesting.py 
f

inWaiting () da el valor de 0, por lo que nunca lee el segundo byte. Si hago un pequeño cambio en el código y leo manualmente los dos bytes esperados, funciona bien.

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS
    )

ser.write('a')
byteData = ser.read(2) # read two expected bytes for the result 'fg'

print byteData

ser.close()

La salida es la esperada:

user@ubuntu:~/code/native$ ./serialTesting.py 
fg

Respuestas a la pregunta(2)

Su respuesta a la pregunta