问题描述
我编写了一个小的pyserial接口,以在发出命令后从COM端口读取数据。例如:在我的系统中,我的系统有很多网络接口,因此我需要使用 ifconfig 命令验证是否所有接口都已启动。但是,当我给出此命令时,该命令的输出在最后几行被截断。输出的大概大小(以字节为单位)将是6500-7000字节,但我一直都只收到6000-6150字节左右。请在下面找到我的代码 '''
import serial
import time
com_serial = serial.Serial("COM6",115200,timeout = 10)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
data_all = b" "
time.sleep(5)
while True:
bytetoread = com_serial.inWaiting()
time.sleep(2)
print ("Bytetoread: ",bytetoread)
data = com_serial.read(bytetoread)
data_all += data
if bytetoread < 1:
break
print ("Data:",data_all)
com_serial.close()
''' **输出: 待读字节数:3967 读取字节数:179 字节读取:2049 读取字节数:0 ** 数据:*********结尾处缺少数据。 我不确定为什么缺少日志?
我尝试了另一种方法。 '''
import serial
import time
com_serial = serial.Serial("COM6",timeout = 10)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
time.sleep(5)
data_all = b" "
data_all = com_serial.read(100000000)
print (data_all)
com_serial.close()
'''
最后几条日志也被截断了。
解决方法
根本原因似乎是Tx和Rx串行缓冲区的缓冲区大小不足。通过使用.set_buffer_size()增加缓冲区大小,可以解决此问题。
$count
'''