解析Redis MONITOR消息

时间:2019-02-07 22:50:19

标签: python parsing redis

我正在尝试在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"

如您所见,我已经在解析时间戳,数据库ID,命令和键,但是最后一部分,我不知道如何从中创建字符串列表。

然后该消息将通过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的情况下,通常args是一个字符串。


我认为Python中必须有一些内置模块可以做到这一点,就像解析命令行字符串一样。

1 个答案:

答案 0 :(得分:0)

subprocess模块的文档说明subprocess.Popen()使用了shlex.split()shlex: Simple lexical analysis

调用shlex.split(args_str)可以有效地将参数字符串转换为所需的子字符串列表。