Python-osc循环调用add_arg无输出的问题求助
问题:Python-OSC循环添加参数无输出的解决办法?
不想手动逐个编写OSC消息参数,比如:
probabilityMSG.add_arg(classProbability[0], arg_type='f') probabilityMSG.add_arg(classProbability[1], arg_type='f') probabilityMSG.add_arg(classProbability[2], arg_type='f') probabilityMSG.add_arg(classProbability[3], arg_type='f')
尝试用循环批量添加参数,但运行后没有任何输出,怀疑python-osc不支持这种方式,相关函数代码如下:
def send_OSC(overallClassProbability, predictedClass, predictedParams): ipAddress = "127.0.0.1" port = 5005 client = udp_client.SimpleUDPClient(ipAddress, port) classProbability = overallClassProbability.flatten() probabilityMSG = osc_message_builder.OscMessageBuilder(address = '/percentage') classMSG = osc_message_builder.OscMessageBuilder(address= '/class') paramsMSG = osc_message_builder.OscMessageBuilder(address= '/params') # ------- for i in range(len(classProbability)): probabilityMSG.add_arg(classProbability[i], arg_type='f') # ------- for i in range(len(predictedParams)): paramsMSG.add_arg(predictedParams[i], arg_type='f') # ------- classMSG.add_arg(predictedClass, arg_type='i') # ------- paramsMSG = paramsMSG.build() classMSG = classMSG.build() probabilityMSG = probabilityMSG.build() client.send(paramsMSG) client.send(classMSG) client.send(probabilityMSG)
请问有解决办法吗?另外是否需要编写自修改Python代码来实现?
解决办法
循环添加参数本身是Python-OSC支持的,问题出在其他环节
- 检查数据是否为空:打印
classProbability和predictedParams,确认数组内有实际数值。如果数组为空,循环不会添加任何参数,接收端可能因消息无内容而无反应。 - 简化循环写法,避免索引错误:把索引循环改为直接遍历元素,代码更简洁且不易出错:
# 替换原索引循环 for prob in classProbability: probabilityMSG.add_arg(prob, arg_type='f') for param in predictedParams: paramsMSG.add_arg(param, arg_type='f') - 升级Python-OSC版本:旧版本可能存在消息构建bug,执行
pip install --upgrade python-osc更新到最新版。 - 排查接收端问题:确认接收端正在监听
127.0.0.1:5005,无防火墙拦截或端口占用情况。
- 检查数据是否为空:打印
完全不需要自修改代码
自修改代码属于过度设计,完全没必要。循环批量添加参数是Python-OSC的常规用法,你的问题和循环写法无关,重点排查上述数据、版本、接收端的问题即可。
内容的提问来源于stack exchange,提问作者randomboar
相关产品推荐
相关产品推荐

