我正在尝试打印来自Arduino的串行数据,但我无法这样做。我尝试的代码是这样的:

import serial
import time
s = serial.Serial('/dev/tty.usbmodemfd141',9600)

while 1:
   if s.inWaiting():
      val = s.readline(s.inWaiting())
      print val


然而,吐出大约30行后,我收到以下错误消息:

Traceback (most recent call last):
  File "py_test.py", line 7, in <module>
    val = s.readline(s.inWaiting())
  File "build/bdist.macosx-10.8-intel/egg/serial/serialposix.py", line 460, in read
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)


我想我在错误地使用inWaiting,但是我看不到如何以其他方式使用它。

最佳答案

您是否尝试过将readline包装在try / except SerialException块中?然后,您可以仅传递SerialException。如果没有任何数据,串行驱动程序可能会报告接收缓冲区中的数据,在这种情况下,您的代码将继续运行。这不是一个很好的解决方案,但是它可能会引导您找到正确的解决方案。

try:
    s.read(s.inWaiting())
except serial.serialutil.SerialException:
    pass # or maybe print s.inWaiting() to identify out how many chars the driver thinks there is

09-05 01:23