在 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)
我试图从串口得到一个响应,但有时会有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)