如何从TCP/IP响应字符串中解析状态、X及Y值?
解析TCP/IP响应中的状态码、X/Y坐标值
你可以通过字符串拆分+类型转换的方式提取所需字段,以下是具体实现:
完整代码实现
import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(("192.168.2.25", 3000)) s.sendall(b'GetLayoutPosition:3\r\n') data = s.recv(1024) # 解析响应内容 response_str = data.decode().strip() # 拆分命令头与数据段 _, data_segment = response_str.split(':') # 拆分各个字段 fields = data_segment.split(';') # 提取目标字段并转换类型 status = int(fields[0]) x_coord = float(fields[2]) y_coord = float(fields[3]) # 输出或保存结果 print(f"状态码: {status}") print(f"X坐标: {x_coord}") print(f"Y坐标: {y_coord}") # 可选:存入字典统一管理 position_data = { 'status': status, 'x': x_coord, 'y': y_coord }
关键步骤说明
- 清理响应字符串:用
strip()去除首尾的空白字符(比如换行符\r\n),避免拆分时出现无效字段。 - 拆分命令与数据:通过
split(':')将响应拆分为命令名称和数据部分,取索引为1的元素得到完整数据段。 - 拆分单个字段:用
split(';')将数据段拆分为独立字段列表,对应顺序为[Status, Index, X, Y, Theta]。 - 类型转换:将状态码转为整数,X/Y坐标转为浮点数,方便后续的逻辑判断和数值计算。
状态判断示例
你可以根据状态码添加逻辑处理:
if status == 1: print("操作成功,已获取布局位置") elif status == -2: print("未找到位置:无作业加载或位置不在标记集中或布局已禁用") elif status == -4: print("超出范围:不在布局位置数量的0到最大值区间内") elif status == -6: print("格式无效:参数数量错误或格式不正确") else: print(f"未知状态码:{status}")
内容的提问来源于stack exchange,提问作者DaniloPapi
相关产品推荐
相关产品推荐

