python - Pyserial 包不会从 COM 端口读取所有数据(始终只读取 6000 到 6150 字节)
问题描述
我写了一个小的 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()
''' **输出:Bytetoread:3967 Bytetoread:179 Bytetoread:2049 Bytetoread:0 **数据:*********最后缺少数据。我不确定为什么日志丢失?
我尝试了另一种方法。'''
import serial
import time
com_serial = serial.Serial("COM6", 115200, 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() 增加缓冲区大小解决了这个问题。
'''
import serial
import time
com_serial = serial.Serial("COM6", 115200, timeout = 10)
com_serial.set_buffer_size(rx_size = 12800, tx_size = 12800)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
data_all = b" "
data_all = com_serial.read(100000000)
print (data_all)
com_serial.close()
'''
推荐阅读
- c# - 如何从 DataGridView 填写 SQL 表
- pine-script - Pine Script (TradingView) 获取下一个会话详细信息
- coq - 如何在 SSReflect 算术语句中使用 Coq 算术求解器策略
- javascript - useState 更新对象属性
- php - 如何恢复发送给 WooCommerce 管理员的新订单电子邮件中的元数据
- python-3.x - 用while循环交换单链表中的节点
- node.js - 未与 Cloud Functions 和 Firestore 建立连接
- vb.net - 如何在 vb.net 表单中禁用 GroupBox 中的所有文本框
- nativescript - 启用捏放大图像标签
- python-3.x - 如何在 python 中使用 selenium 在 instagram 中发送直接消息?