如何在Python中获取输出的大小(以字节为单位)

时间:2015-12-02 18:14:23

标签: python python-2.7

首先,我要感谢任何能帮助我的人。

- 环境

我在Windows 8操作系统中使用Python v2.7。 我使用COM4通过在Python代码中发送一些命令来与机器人通信。

我向机器人发送一个命令getversion,并假设得到一堆数据,这些数据采用以下格式(我省略了一些,它太长了):

  

组件,主要,次要,构建辅助

     

APPassword,956FC721

     

了baseid,1.2,1.0,18000,2000,

     

BatteryType,4,LIION_4CELL_SMART,

     

Beehive网址,beehive.cloud.com

     

BlowerType,1,BLOWER_ORIG,

     

Bootloader版本,27828 ,,

     

BrushMotorType,1,BRUSH_MOTOR_ORIG,

     

BrushSpeed,1400 ,,

     

BrushSpeedEco,800 ,,

     

ChassisRev,1 ,,

     

Cloud Selector,2

     

DropSensorType,1,DROP_SENSOR_ORIG,

     

LCD Panel,137,240,124,

     

LDS CPU,F2802x / c001 ,,

     

LDS Serial,KSH13315AA-0000153 ,,

  • 我的问题是: 基于这种格式,如何获得上述结果的大小(以字节为单位)? 这个问题的原因是,只要知道它有多大,我就能得到完整/完整的结果。

具体来说,我的代码是:

ser.write('getver \n')   # send 'getversion' cmd to robot

ser.read(1305)   

getver的响应大小是1305字节,是的,我手动计算,这就是为什么我想让Python告诉我它有多大。

1 个答案:

答案 0 :(得分:1)

为了能够与设备通信,您必须知道该通信的协议是什么。设计协议的人必须定义一种方法让您知道要读取多少字节。如果你有一个规范,它可能涵盖了这个问题。

因此,有一种方法可以预先确定字节数或检测传输结束,例如:由一个特殊的结束角色存在。

如果没有某种规范,我们只能猜出协议是什么。

  • 响应邮件大小显然不固定。也许有一种方法可以询问设备" getversion的答案长度"?
  • 某些协议会在每条消息前面加上长度信息。这里没有。也许你可以把设备放在一个不同的模式,通过发送一些特殊的命令来解决这个问题吗?
  • 您的信息看起来并不像标记的结尾那样,但也许它只是不可见,例如可能最后会有一个空字符('\0')?如果有的话,你可以逐个阅读,直到它出现。
  • 如果找不到任何其他解决方案,您可以尝试在读取时设置合理的超时(ser = serial.Serial(..., timeout=2, ...))。然后尝试阅读所有内容。当没有其他内容可读时,read函数将无限期冻结,除非超时。如果您设置了相当长的超时且在该时间内没有收到日期,则可以假设传输已结束。