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

问题描述 投票:2回答:2

我正在从另一个函数调用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)
amazon-web-services aws-lambda python-2.x
2个回答
9
投票

以下代码解决了该问题。显然我需要将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

0
投票

如果您希望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))
© www.soinside.com 2019 - 2024. All rights reserved.