Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python serial.readline()未阻塞_Python_Blocking_Pyserial - Fatal编程技术网

Python serial.readline()未阻塞

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

我试图将硬件串行端口设备与Python结合使用,但我遇到了时间问题。如果我向设备发送询问命令,它应该用数据响应。如果我试图读取传入的数据太快,它将不会收到任何信息

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()
,但没有帮助。