为了账号安全,请及时绑定邮箱和手机立即绑定

python Paho客户端MQTT:写入多个文件

python Paho客户端MQTT:写入多个文件

侃侃尔雅 2022-06-02 10:21:03
初始化一个 MQTT 客户端,连接到特定主题的 MQTT 代理,对于在该主题上接收到的每条消息,执行一个函数调用以检查消息中属性的长度是否大于 200,如果是,则查找陀螺仪读数: GyroX & 保存到文件确保文件大小保持小于 400MB,否则打开一个新文件并开始写入。我想写入多个文件,即根据大小将传入的 json 消息发布到不同的文件,而不仅仅是一个文件。怎么做 ?任何帮助表示赞赏file_name='/tmp/gyro_256'+"_"+timestr+".csv"def on_message(client, userdata, message):  y = json.loads(message.payload)  v = (len(y['sec_data']))  p = int(v)  if p >= 200:          d = (y["sec_data"][10]["GyroX"])           with open(file_name,'a+') as f:                    f.write(d + "\n")client = mqttClient.Client("123")               #create new instanceclient.username_pw_set(user, password=password)    #set username and client.on_connect= on_connect                      #attach function to   client.on_message= on_message                      #attach function to    client.connect(broker_address,port,100) #connectclient.subscribe("tes1") #subscribeclient.loop_start() #then keep listening foreverif int(os.path.getsize(file_name)) > 47216840 :     client.loop_stop()     timestr = time.strftime("%Y%m%d%H%M%S")     file_name = '/vol/vol_HDB/data/gyro_256'+"_"+timestr+".csv"client.loop_start()
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

第一次调用之后的任何代码client.loop_start()都不会运行,因为该调用永远阻塞。


如果要更改文件名,则必须在on_message回调中进行文件大小测试。


def on_message(client, userdata, message):

  global filename

  y = json.loads(message.payload)

  v = (len(y['sec_data']))

  p = int(v)


  if int(os.path.getsize(file_name)) > 47216840 :

     timestr = time.strftime("%Y%m%d%H%M%S")

     file_name = '/vol/vol_HDB/data/gyro_256'+"_"+timestr+".csv"


  if p >= 200:

    d = (y["sec_data"][10]["GyroX"])

    with open(file_name,'a+') as f:

      f.write(d + "\n")


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信