在 Python 5 秒后停止等待串行响应

Stop waiting for serial response after 5 seconds in Python

我试图从串口得到一个响应,但有时会有none。这使我的脚本等待永远,因此我必须终止它。

是否有简单方法让我的代码等待例如 5 秒,如果没有响应则继续执行脚本?

我的代码如下所示:

import serial
ser = serial.Serial('COM3', 9600)

test = '2ho0'

ser.write(str.encode(test))
data = ser.readline()
print(data)

我已经尝试了 解决方案,但是在 Hello world 打印 5 次后它并没有停止。相反,它会继续写入 Hello World,直到我得到 runtime error.

here and here 之后,我尝试了很多答案,但都没有成功。

编辑:我想知道是否有可能有类似的东西:

ser.serialReplyAvailable()

这也适合我。

感谢任何建议。

如果读取不成功,你可以尝试将 readline 包装到一个 while 语句中,并在里面有一个计时器滴答。如果是,就跳出来。

from time import sleep
tries = 0
while tries < 4:
    data = ser.readline()
    if data != None: #Or "", whatever the return data
        break
    sleep(5); tries += 1

您可以指定一个读取超时,这将使 ser.readline() 立即 return 如果请求的数据可用,或者 return 在超时到期之前读取任何内容。检查 pySerial 文档,那里有更多内容。

ser = serial.Serial('COM3', 9600, timeout=5)