Python Paho клиент MQTT: запись в несколько файлов - PullRequest
0 голосов
/ 20 сентября 2019

Открытие и запись входящего JSON в несколько файлов на основе ограничения размера!

Ссылка на сообщение: https://stackoverflow.com/a/54306598/12097046

Я хочу записать несколько файлов, т.е. публиковать входящие сообщения 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()

1 Ответ

0 голосов
/ 21 сентября 2019

Ни один из кодов после первого вызова 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")
...