Я пытаюсь построить мост между сервером Redis и MQTT, чтобы при обновлении базы данных Redis эти обновления отправлялись клиентам через MQTT.
Для этого клиента (только один,мост) подключается к базе данных Redis и начинает отслеживать ее.
Моя проблема связана с анализом команд, а точнее с содержащимися в них аргументами, представляющими собой список строк, разделенных пробелами.
Например, когда я сохраняю следующий хеш в Redis
data = {
"key-3-1-json": "value-1",
"key-3-2-json": 'this "this is \'quoted\' text"',
}
print r18.hmset("test-hash", {
"key-1": "value-1",
"key-2": 'this "this is \'quoted\' text"',
"key-3": json.dumps(data),
})
, клиент получает следующее
1549578825.1 0 HMSET test-hash "key-3" "{\"key-3-1-json\": \"value-1\", \"key-3-2-json\": \"this \\\"this is 'quoted' text\\\"\"}" "key-2" "this \"this is 'quoted' text\"" "key-1" "value-1"
Как видите, я ужепарсинг метки времени, идентификатора базы данных, команды и ключа, но в последней части я не знаю, как создать из него список строк.
Это сообщение затем будет отправлено через MQTT как
mqtt.publish("redis/mon/0/HMSET/test-hash", json.dumps(args))
, где args
будет
[
"key-3",
"{\"key-3-1-json\": \"value-1\", \"key-3-2-json\": \"this \\\"this is 'quoted' text\\\"\"}",
"key-2",
"this \"this is 'quoted' text\"",
"key-1",
"value-1"
]
, что, вероятно, будет наиболее сложным случаем, поскольку обычно аргументы представляют собой одну единственную строку, в случае, когда r18.set
был бы использован яВместо r18.hmset
.
Я думаю, что в Python должен быть какой-то встроенный модуль, который мог бы сделать это, как если бы он разбирал строку командной строки.