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

j-u*_*i-n 3 python-2.x amazon-web-services aws-lambda

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

lambda函数

def lambda_handler(event, context):
    return 'Just a string'
Run Code Online (Sandbox Code Playgroud)

调用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)
Run Code Online (Sandbox Code Playgroud)

j-u*_*i-n 11

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

def invoke_lambda(payload):
    r = lambda_client.invoke(
        FunctionName='MyLambdaFunction',
        InvocationType='RequestResponse',
        Payload=bytes(payload)
    )
    t = r['Payload']
    j = t.read()
    print j
Run Code Online (Sandbox Code Playgroud)


Iva*_*tov 9

如果您希望 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))
Run Code Online (Sandbox Code Playgroud)

  • 这也应该有效: ```response_payload = json.load(invoke_response['Payload'])``` 注意 json.load 而不是 json.loads。 (4认同)