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

初始化一个 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 instance

client.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) #connect

client.subscribe("tes1") #subscribe

client.loop_start() #then keep listening forever

if 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()


侃侃尔雅
浏览 98回答 1
1回答

幕布斯6054654

第一次调用之后的任何代码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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python