Lambda Return Payload botocore.response.StreamingBody对象打印但在变量中为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda Return Payload botocore.response.StreamingBody对象打印但在变量中为空相关的知识,希望对你有一定的参考价值。

我正在从另一个函数调用lambda函数,并希望根据响应采取不同的操作,非常标准的东西。然而,我得到了一些意想不到的行为,这可能是显而易见的事情,但它正在躲避我。我在最简单的例子中重新创建了我的例子,任何帮助都会非常感激。

lambda函数

def lambda_handler(event, context):
    return 'Just a string'

调用lambda函数的代码

    def invoke_lambda(payload):
        r = lambda_client.invoke(
            FunctionName='MyLambdaFunction',
            InvocationType='RequestResponse',
            Payload=bytes(payload)
        )

    p = r['Payload'].read()
    print p #Prints an empty string
    print(r['Payload'].read()) #Prints Just a string
    invoke_lambda(payload)
答案

以下代码解决了该问题。显然我需要将streamingbody设置为变量,然后将其读入另一个变量。我用这个link作为参考

def invoke_lambda(payload):
    r = lambda_client.invoke(
        FunctionName='MyLambdaFunction',
        InvocationType='RequestResponse',
        Payload=bytes(payload)
    )
    t = r['Payload']
    j = t.read()
    print j
另一答案

如果您希望JSON作为响应,则可以执行以下操作:

import json

def invoke_lambda(payload):
    response = lambda_client.invoke(
        FunctionName='MyLambdaFunction',
        InvocationType='RequestResponse',
        Payload=bytes(payload)
    )  

    response_payload = json.loads(invoke_response['Payload'].read().decode("utf-8"))

    print ("response_payload: {}".format(response_payload))

以上是关于Lambda Return Payload botocore.response.StreamingBody对象打印但在变量中为空的主要内容,如果未能解决你的问题,请参考以下文章

使用AWS lambda函数调用lex chat bot

laravel 管道模式的应用

Facebook Bots 按钮上的“有效负载”选项

ruby中proc和lambda的return区别

python return 及lambda函数

DM'ing 反应 Discord.py