Python serial.readline()未阻塞
我试图将硬件串行端口设备与Python结合使用,但我遇到了时间问题。如果我向设备发送询问命令,它应该用数据响应。如果我试图读取传入的数据太快,它将不会收到任何信息Python serial.readline()未阻塞,python,blocking,pyserial,Python,Blocking,Pyserial,我试图将硬件串行端口设备与Python结合使用,但我遇到了时间问题。如果我向设备发送询问命令,它应该用数据响应。如果我试图读取传入的数据太快,它将不会收到任何信息 import serial device = serial.Serial("/dev/ttyUSB0", 9600, timeout=0) device.flushInput() device.write("command") response = device.readline() print response '' readli
import serial
device = serial.Serial("/dev/ttyUSB0", 9600, timeout=0)
device.flushInput()
device.write("command")
response = device.readline()
print response
''
readline()。有一个简单的解决方法吗?我不能添加推荐,所以我将添加这个作为答案。你可以参考。有人试图回答与你的问题类似的问题
似乎他们将数据读取放在一个循环中,并在数据进入时不断循环。如果你愿意采用这种方法,你必须问自己一件事,你什么时候停止收集数据并跳出循环?当您已经在收集数据时,您可以尝试继续读取数据,如果在几毫秒内没有收到任何数据,请跳出并获取该数据,然后对其执行您想要的操作
您也可以尝试以下方法:
While True:
serial.flushInput()
serial.write(command)
incommingBYTES = serial.inWaiting()
serial.read(incommingBYTES)
#rest of the code down here
readline()
使用与传递给serial.serial()
的超时值相同的超时值。
如果希望readline阻塞,只需删除timeout参数,默认值为None
如果您希望有一个打开设备的超时时间,您还可以在调用readline()
之前将其设置为None
:
import serial
try:
device = serial.Serial("/dev/ttyUSB0", 9600, timeout=0.5)
except:
#Exception handeling
device.flushInput()
device.write("command")
device.timeout=None
response = device.readline()
print response
不知道是否有帮助,但在write
和readline
之间显示flush
调用。此外,很难理解串行
实际上是什么,以及它是如何配置的。你能发布一个更完整的代码示例,让某人实际运行并看到问题吗?你的超时值设置为多少?我扩展了这个示例。我添加了flush()
,但没有帮助。