2012-10-31 140 views
0

我正在使用boto库从SQS队列读取消息。我的留言有这样的文字: { Command:XXXXXXXXXXX Key:XXXXXXX Input:XXXXXX}。 Boto用base64编码发送并读取它,这样如果我读取消息体,那么文本就在那里。 但我怎么能读到这样使用python + boto解析亚马逊SQS消息

Command = input['Command'] 
Key = input_message['Key'].split(',') 

,这样我可以使用这些值作进一步处理...

消息我很新到Python也

回答

1

好吧,你似乎有某种格式的输入 - 是否标准化?如果没有,您需要解析消息的内容并获取个人密钥。

我之前在我的项目中做过的工作是使用JSON来促进平台之间的数据交换。

如果你没有一个奢侈品编辑您输入的数据,你需要做这样的事情(很naiive为例):

input = "{ Command:XXXXXXXXXXX Key:XXXXXXX Input:XXXXXX }" 
data = filter(lambda x: ":" in x, input.split()) 
message_dict = dict() 
for item in data: 
    key, val = item.split(":") 
    message_dict[key] = val 
+0

谢谢,这是真正有用的 – TJ974

+0

@ TJ974 \t然后将其标记为答案,请;) – petr

0

考虑使用良好的老式JSON轻松地发送和接收字典acrost电线。

该测试功能验证的数据格式是非常明确的使用JSON:

test_sqs.py

import json 

import boto3 
from moto import mock_sqs 

@mock_sqs 
def test_sqs(): 
    sqs = boto3.resource('sqs', 'us-east-1') 
    queue = sqs.create_queue(QueueName='votes') 

    queue.send_message(MessageBody=json.dumps(
     {'Command': 'drink', 'Key': 'beer', 'Input': 'tasty'})) 

    messages = queue.receive_messages() 
    assert len(messages) == 1 
    assert messages[0].body == (
     '{"Input": "tasty", "Command": "drink", "Key": "beer"}')