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

1 人关注

我正试图获得一个 response 串行端口,但有时也会有 none .这使我的脚本等待 forever 因此,我必须杀死它。

是否有 simple 如何让我的代码等待5秒钟,如果没有回应,就继续执行脚本?

My code looks like this:

import serial
ser = serial.Serial('COM3', 9600)
test = '2ho0'
ser.write(str.encode(test))
data = ser.readline()
print(data)

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

Over herehere我尝试了严重的答案,也没有成功。

编辑:我在想,是否有可能出现这样的情况。

ser.serialReplyAvailable()

这对我来说也是一项工作。

谢谢你的任何建议。

2 个评论
Eraw
我认为asyncio模块(特别是 Task 类)是你要找的。这可以帮助你。 stackoverflow.com/questions/34710835/...
我以为, SIGNAL 只在unix上正确工作。由于我是在Windows上,这很不幸地不能工作。我得到的错误是 signal has no attribute SIGHUP
python
serial-port
wait
X_841
X_841
发布于 2019-11-28
2 个回答
FlyinDoji
FlyinDoji
发布于 2019-11-28
已采纳
0 人赞同

你可以指定一个读取超时,这将使 ser.readline() 在请求的数据可用时立即返回,或者在超时结束前返回所读取的数据。查看 pySerial 文档,那里有更多关于这个的内容。

ser = serial.Serial('COM3', 9600, timeout=5)
    
tst
tst
发布于 2019-11-28
0 人赞同

你可以尝试将readline包装成一个while Statement,如果读取不成功,可以在里面设置一个定时器。如果是的话,就跳出它。

from time import sleep
tries = 0
while tries < 4: