首页 > 解决方案 > Python Lambda - 打印“列表”问题,需要换行

问题描述

在返回每个用户和访问密钥后,我在打印带有新换行符的列表时遇到问题

Lambda 返回:

['Hannah', 1103, 'Nick', 126]

我希望它在每个用户和访问密钥年龄返回后返回换行符

['Hannah', 1103
'Nick', 126]
import boto3, json, time, datetime, sys

client = boto3.client('iam')
sns = boto3.client('sns')
usernames = []
mylist = []

def lambda_handler(event, context):
    users = client.list_users()
    for key in users['Users']:
        a = str(key['UserName'])
        usernames.append(a)
    for username in usernames:
        try:
            res = client.list_access_keys(UserName=username)  
            accesskeydate = res['AccessKeyMetadata'][0]['CreateDate'] 
            accesskeydate = accesskeydate.strftime("%Y-%m-%d %H:%M:%S")
            currentdate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
            accesskeyd = time.mktime(datetime.datetime.strptime(accesskeydate, "%Y-%m-%d %H:%M:%S").timetuple())
            currentd = time.mktime(datetime.datetime.strptime(currentdate, "%Y-%m-%d %H:%M:%S").timetuple())
            active_days = (currentd - accesskeyd)/60/60/24 ### We get the data in seconds. converting it to days

            if 90 < active_days:
                a = str(username)
                c = int(int(round(active_days)))

                mylist.append(a)
                mylist.append(c)
        except:
                f = str('')

    print(mylist)
    finallist = ''.join(str(mylist))

    sns_message = (finallist)
    response = sns.publish(
        TopicArn='arn:aws:sns:ARN',
        Message= sns_message,
        Subject='Access Keys which need rotating',
    )

标签: pythonaws-lambda

解决方案


似乎你需要某种漂亮的打印功能来做你想做的事。以下函数完全符合您的要求:

result = ['Hannah', 1103, 'Nick', 126]

def prettyprint(l):
    s = '['
    n_items = len(l)
    for idx, item in enumerate(l):
        is_str = isinstance(item, str)
        s += f"'{item}'" if is_str else str(item)
        if idx != n_items-1:
            s += ', ' if is_str else '\n'
    s += ']'
    return s

print(prettyprint(result))

印刷:

['Hannah', 1103
'Nick', 126]

推荐阅读